Java 球的随机起始位置,避免碰撞

Java 球的随机起始位置,避免碰撞,java,swing,random,Java,Swing,Random,我知道有一些类似的问题,但我的代码是略有不同,我觉得它几乎完成我只是需要一个轻微的调整,但我不知道到底是什么 我的目标是在900x600画布中生成圆形,而不使它们最初发生碰撞。球的数量由用户指定,最多100个 到目前为止,我的方法是: startCounter = 8; balls = new ArrayList<>(); for (int i = 0; i < amount; i++) { diameter = random.nextInt(30) + 10 +

我知道有一些类似的问题,但我的代码是略有不同,我觉得它几乎完成我只是需要一个轻微的调整,但我不知道到底是什么

我的目标是在900x600画布中生成圆形,而不使它们最初发生碰撞。球的数量由用户指定,最多100个

到目前为止,我的方法是:

startCounter = 8;

balls = new ArrayList<>();

for (int i = 0; i < amount; i++) {
    diameter = random.nextInt(30) + 10 + diameterRange; //generate diameter value for ball
    startCounter += diameter + 25; //stop balls from spawning on top of each other

    BouncingBall ball = makeBall(startCounter, diameter, i);
    if (Physics.Collision(ball, balls)
      || ball.getXPosition() > 850 || ball.getYPosition() > 550)
    {
        continue; //avoid starting collisions
    }

    balls.add(ball);
}
startCounter=8;
balls=新的ArrayList();
对于(int i=0;i850 | | ball.getYPosition()>550)
{
继续;//避免开始冲突
}
添加(ball);
}
目前,这几乎可以完美地工作,只是如果if语句失败,它将不会创建球,从而导致球数少于用户指定的球数

我试着加上我--;添加到if语句的内容,但这不起作用,在本例中,球似乎生成错误


谢谢:)

将其更改为while循环,即:

startCounter = 8;
balls = new ArrayList<>();
int goodBalls=0;
while (goodBalls<amount){
  diameter = random.nextInt(30) + 10 + diameterRange;//generate diameter value for ball
  startCounter += diameter + 25;//stop balls from spawning on top of eachother
  BouncingBall ball = makeBall(startCounter, diameter, i);
  if !(Physics.Collision(ball, balls)||ball.getXPosition()>850||ball.getYPosition()>550){//avoid starting collisions
    balls.add(ball);
    goodBalls++;
  }
}
startCounter=8;
balls=新的ArrayList();
int goodBalls=0;
而(goodBalls850 | | ball.getYPosition()>550){//避免启动碰撞
添加(ball);
goodBalls++;
}
}

For循环在第一个循环之前已确定循环的数量。更好的方法是将(int i=0;i替换为'while i 代码应该是这样的 `startCounter=8; balls=新的ArrayList()

while(i850 | | | ball.getYPosition()>550){//避免开始碰撞
继续;
}
添加(ball);
i+=1;
}

`

我设法解决了这个问题,谢谢大家的帮助:)

startCounter=8;
balls=新的ArrayList();
while(balls.size()
850 | | ball.getYPosition()>550){
继续;
}
添加(ball);
i++;
}

之所以发生这种情况,是因为我(索引)仍在增加,要么增加数量,要么将其更改为while loop(最好更改)。问题中的格式不好不能成为您答案格式不好的借口。@EdTaylor我已更正了初始设置,如果有帮助,您能接受答案吗?这种方法会导致严重错误,球现在卡住了:S
            while (i < amount) {
                diameter = random.nextInt(30) + 10 + diameterRange;//generate diameter value for ball
                startCounter += diameter + 25;//stop balls from spawning on top of eachother
                BouncingBall ball = makeBall(startCounter, diameter, i);
                if (Physics.Collision(ball, balls)||ball.getXPosition()> 850||ball.getYPosition()>550){//avoid starting collisions

                    continue;
                }

                balls.add(ball);
                i+=1;
            }
               startCounter = 8;
                balls = new ArrayList<>();

             while (balls.size()<amount){
                 int i = 0;

                    diameter = random.nextInt(30) + 10 + 
                diameterRange;//generate diameter value for ball

                    startCounter = random.nextInt(800) + 100;
                    startCounterY = random.nextInt(400) +100;
                    BouncingBall ball = makeBall(startCounter, 
                   startCounterY, diameter, i);
                    if (Physics.Collision(ball, balls)||ball.getXPosition()> 
                    850||ball.getYPosition()>550){

                        continue;
                    }

                    balls.add(ball);
                    i++;

                  }