Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在对照ArrayList进行检查时保持生成值_Java_Loops_Arraylist - Fatal编程技术网

Java 在对照ArrayList进行检查时保持生成值

Java 在对照ArrayList进行检查时保持生成值,java,loops,arraylist,Java,Loops,Arraylist,我想我已经盯着这个代码太久了,我没有看到它。我正在写一个小游戏,其中一部分会生成许多对象(当前为形状)。创建形状时,它们将作为类定义的对象添加到ArrayList中。我注意到,随着形状数量的增加,重叠形状的几率也随之增加,我想对此进行修正。我试图通过检查ArrayList中每个现有对象的Y坐标来实现这一点。但在我的一生中,我不记得如何不断迭代check函数,直到生成唯一的Y值 我最初的解决方案是do…while循环,但由于某些原因,它一直返回true 我稍微简化了我的代码,只保留了问题的关键部分

我想我已经盯着这个代码太久了,我没有看到它。我正在写一个小游戏,其中一部分会生成许多对象(当前为形状)。创建形状时,它们将作为类定义的对象添加到ArrayList中。我注意到,随着形状数量的增加,重叠形状的几率也随之增加,我想对此进行修正。我试图通过检查ArrayList中每个现有对象的Y坐标来实现这一点。但在我的一生中,我不记得如何不断迭代check函数,直到生成唯一的Y值

我最初的解决方案是do…while循环,但由于某些原因,它一直返回true

我稍微简化了我的代码,只保留了问题的关键部分。我错过了什么?提前感谢您的帮助

编辑:还请记住,随着游戏的进行,对象会不断添加到ArrayList中或从ArrayList中删除。每次在游戏中移除一个对象(形状)时,它都会重新生成。这意味着,对于游戏中创建的每个对象,都需要对照现有对象进行检查

int x, y;
int numShapes = 10;
ArrayList<ShapeObject> soArray = new ArrayList<ShapeObject>();


private boolean checkY(int yy) {
  for(int i = 0; i < soArray.size(); i++) {
    if(soArray.get(i).oY == yy) {
      return true;
    }
  }
  return false;
}


public void makeShapes() {
  for(int i = 0; i < numShapes; i++) {
    if(soArray.size() < numShapes) {
      x = rand.nextInt(width - 45) + 45;

      do {
        y = rand.nextInt(height - 4) + 2;
      } while(checkY(y));

      soArray.add(new ShapeObject());
    }
  }
}

class ShapeObject {
  int oX = x;
  int oY = y;
}
intx,y;
int numShapes=10;
ArrayList soArray=新的ArrayList();
私有布尔校验(int-yy){
对于(int i=0;i
尝试将类的结构更改为

class ShapeObject {
   int oY = 0;
   int oX = 0;

   public ShapeObject(int x, int y)
   {
     oX = x;
     oY = y;
   }
}
那你有

soArray.add(new ShapeObject(x, y));
如果我能指出一些有用的东西,我还在看你的代码

也尝试

if(soArray.get(i).oY == yy) {
    println(soArray.get(i).oY +' = '+ yy); //to debug
    return true;
}

试着把你的班级结构改为

class ShapeObject {
   int oY = 0;
   int oX = 0;

   public ShapeObject(int x, int y)
   {
     oX = x;
     oY = y;
   }
}
那你有

soArray.add(new ShapeObject(x, y));
如果我能指出一些有用的东西,我还在看你的代码

也尝试

if(soArray.get(i).oY == yy) {
    println(soArray.get(i).oY +' = '+ yy); //to debug
    return true;
}

因为我基本上是自己解决了这个问题,所以我把它作为一个答案贴出来

结果我忘了我受到画布的限制。我的单元格大小是12像素,网格为600像素。我注意到在我的ArrayList中有46个对象之后,它会失败。所以基本上所有可用的Y坐标都被取下来了。我用100个对象进行了测试,所以它一直在运行


我还将checkY()修改为checkXY(),这样我就可以完全控制对象可用的行数和列数(x和y坐标)。

因为我基本上自己解决了这个问题,所以我将它作为一个答案发布

结果我忘了我受到画布的限制。我的单元格大小是12像素,网格为600像素。我注意到在我的ArrayList中有46个对象之后,它会失败。所以基本上所有可用的Y坐标都被取下来了。我用100个对象进行了测试,所以它一直在运行


我还将checkY()修改为checkXY(),以便完全控制对象可用的行数和列数(x和y坐标)。

OY!这些是一些描述性的变量名,你们可以在y坐标下使用a吗?你们的
高度
值可能太低了。其余的“缩短”代码在我看来很好。@LaurentPerrin-为什么?当我应该能够用我已经拥有的东西做我需要的事情时,我不希望仅仅为Y坐标添加和依赖另一个数据结构。@Andreas_D-当我不检查数组时,高度值可以正常工作。我的问题是,由于某种原因,checkY()一直返回true到do…while循环,因此它永远不会退出。ArrayList中没有任何内容,但它始终显示
soArray.get(i).oY
等于我传入的Y值.oY!这些是一些描述性的变量名,你们可以在y坐标下使用a吗?你们的
高度
值可能太低了。其余的“缩短”代码在我看来很好。@LaurentPerrin-为什么?当我应该能够用我已经拥有的东西做我需要的事情时,我不希望仅仅为Y坐标添加和依赖另一个数据结构。@Andreas_D-当我不检查数组时,高度值可以正常工作。我的问题是,由于某种原因,checkY()一直返回true到do…while循环,因此它永远不会退出。ArrayList中没有任何内容,但它始终显示
soArray.get(i).oY
等于我传入的Y值。感谢您的输入。当我专注于功能时,我总是忘了观察我的结构。我通常稍后会回去清理东西,但我应该在开始的时候做这件事,这样我以后就不用担心了。谢谢你的意见。当我专注于功能时,我总是忘了观察我的结构。我通常稍后会回去清理东西,但我应该在一开始就做,这样以后就不用担心了。