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

标签 java loops arraylist duplicates

我正在为一个类制作一个游戏,游戏的一个元素是显示一些卷心菜,这些卷心菜存储在 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);
        }       
    }

最佳答案

最简单的方法可能是添加另一个循环。

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);

关于java - 使用循环创建对象的 ArrayList,检查重叠对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4424732/

相关文章:

java - 哪种方法更适合查找数组列表中元素的频率?

java - 使用 StaxEventItemWriter 构建重要的 XML 文件

java - 如何在android中创建图像按钮?

loops - 如果 MonadPlus 是 "generator"类,那么 "consumer"类是什么?

java - 按创建顺序对 ArrayList<String> 进行排序 [Android/Java]

java - 从 CObArray 到 ArrayList

java - 如何调试外部 JAR 文件

java - 提取引号之间的子字符串,忽略\"

java - 嵌套循环以查找计数

loops - For 和 While 循环 : differences, 问题及原因