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_Duplicates - Fatal编程技术网

Java 使用循环创建对象的ArrayList,检查重叠对象

Java 使用循环创建对象的ArrayList,检查重叠对象,java,loops,arraylist,duplicates,Java,Loops,Arraylist,Duplicates,我正在为一个类制作一个游戏,游戏的一个元素是显示一些卷心菜,它们存储在ArrayList中。此ArrayList必须是20、10个好卷心菜和10个坏卷心菜的固定数字 在创建卷心菜时,我希望确保它们在显示时不会重叠。我遇到的问题是,当我发现一个卷心菜重叠时,我不知道如何返回并在它的位置创建一个新的卷心菜。到目前为止,当代码发现重叠时,它只是停止循环。我想我很难正确地跳出一个循环,并在未填充的索引处重新启动 这是我到目前为止所做的。如有任何建议,将不胜感激 // Initialize

我正在为一个类制作一个游戏,游戏的一个元素是显示一些卷心菜,它们存储在ArrayList中。此ArrayList必须是20、10个好卷心菜和10个坏卷心菜的固定数字

在创建卷心菜时,我希望确保它们在显示时不会重叠。我遇到的问题是,当我发现一个卷心菜重叠时,我不知道如何返回并在它的位置创建一个新的卷心菜。到目前为止,当代码发现重叠时,它只是停止循环。我想我很难正确地跳出一个循环,并在未填充的索引处重新启动

这是我到目前为止所做的。如有任何建议,将不胜感激

        // Initialize the elements of the ArrayList = cabbages
    // (they should not overlap and be in the garden) ....
    int minX = 170 ;
    int maxX = 480;
    int minY = 15;
    int maxY = 480;
    boolean r = false;
    Cabbage cabbage;
    for (int i = 0; i < N_GOOD_CABBAGES + N_BAD_CABBAGES; i++){
        if (i % 2 == 0){
        cabbage = new GoodCabbage((int)(Math.random()* (maxX-minX + 1))+ minX,
                (int)(Math.random()*(maxY-minY + 1))+ minY,window);
        } 
        else {
            cabbage = new BadCabbage((int)(Math.random()* (maxX-minX + 1))+ minX,
                    (int)(Math.random()*(maxY-minY + 1))+ minY,window);
            }
        if (i >= cabbages.size()){
        // compares the distance between two cabbages
            for (int j = 0; j < cabbages.size(); j++){
                Point c1 = cabbage.getLocation();
                Cabbage y = (Cabbage) cabbages.get(j);
                Point c2 = y.getLocation();
                int distance = (int) Math.sqrt((Math.pow((c1.x - c2.x), 2) + Math.pow((c1.y - c2.y),2)));
                if (distance <= (CABBAGE_RADIUS*2) && !(i == j)){
                    r = true;
                }
            }
        if (r){
            break;
            }
        cabbage.draw();
        cabbages.add(i, cabbage);
        }       
    }
//初始化ArrayList的元素=卷心菜
//(它们不应重叠并在花园中)。。。。
int minX=170;
int max=480;
int minY=15;
int-maxY=480;
布尔r=false;
卷心菜;
对于(int i=0;i=cabbages.size()){
//比较两个卷心菜之间的距离
对于(int j=0;j如果(距离最简单的方法是添加另一个循环

do…while循环适用于始终需要至少一次迭代的情况。例如:

  boolean overlapped;
  do {
      // create your new cabbage here

      overlapped = /* check whether it overlaps another cabbage here */;
  } while (overlapped);

  cabbage.draw();
  cabbages.add(i, cabbage);

看起来你在做卷心菜,然后把它们扔掉,这是一种(微不足道的)浪费

为什么不随机选取X和Y,检查那个点是否有空间,然后在有好点的时候做卷心菜呢?你只需要翻动数字,而不是制作和丢弃整个对象。此外,你不必重复好卷心菜和坏卷心菜的随机位置代码

int x,y 做{ //选择x和y }而卷心菜(x,y,列表)

//在x,y处创建一个卷心菜,并将其添加到列表中

布尔卷心菜重叠(int x,int y,数组列表现有卷心菜)