【问题标题】:How to make loop end once the last element in the array meets condition?一旦数组中的最后一个元素满足条件,如何使循环结束?
【发布时间】:2018-05-04 05:10:20
【问题描述】:

在我的弹跳球程序中,它要求用户插入一些球,这些球将显示在屏幕上,从画布顶部开始,然后在画布底部的一条线上落下并弹跳。

finished = true时,动画将停止。到目前为止,一旦第一个球的 X 位置超过 550,动画就会停止。一旦每个球的 X 位置超过 550,我如何使动画结束?

public void multiBounce(int numBalls)
{
    BouncingBall[] balls;
    balls = new BouncingBall[numBalls];

    int x = 50;
    int y = 150;

    for (int i = 0; i < balls.length; i++){


          balls[i] = new BouncingBall(x, y, 16, Color.blue, ground, myCanvas);
          x = x + 20;
          y = y - 30;
          balls[i].draw();  
    }

    boolean finished =  false;

    while(!finished) {

     for (int i = 0; i < balls.length; i++){

           balls[i].move();

    }

     for (int i = 0; i < balls.length; i++){
         if (balls[i].getXPosition() >= 550){

             finished = true;

        }
    }
}

【问题讨论】:

  • 使用break 退出循环。
  • 如果 any 球的位置为 &gt;= 550,则您当前将完成设置为 true。相反,首先设置 finished = true,如果任何球有一个职位&lt; 550.

标签: java arrays loops methods parameters


【解决方案1】:

只需检查每个球是否超出您想要的位置。此代码 sn-p 应该可以完成工作。只需将最后一个 for 循环替换为下面的代码即可。

finished=true;
for (int i = 0; i < balls.length; i++){ 
    if (balls[i].getXPosition() >= 550){  
        finished = finished && true; }
    else{
        finished=false;
        break;
    } 
}

【讨论】:

    【解决方案2】:

    您应该使用break 语句。当它在loop 中遇到时,loop 立即终止,程序控制在loop 之后的下一条语句处恢复。更多详情见Branching Statements

    public void multiBounce(int numBalls)
        {
            BouncingBall[] balls;
            balls = new BouncingBall[numBalls];
    
            int x = 50;
            int y = 150;
    
            for (int i = 0; i < balls.length; i++){
    
    
                balls[i] = new BouncingBall(x, y, 16, Color.blue, ground, myCanvas);
                x = x + 20;
                y = y - 30;
                balls[i].draw();
            }
    
            boolean finished =  false;
    
            while(!finished) {
    
                for (int i = 0; i < balls.length; i++){
    
                    balls[i].move();
    
                }
    
                for (int i = 0; i < balls.length; i++){
                    if (balls[i].getXPosition() < 550){
                        finished = false;
                        break;
                    }
                    else {
                        finished = true;
                    }
                }
    
                }
            }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-18
      • 1970-01-01
      • 1970-01-01
      • 2017-01-03
      • 2013-08-03
      相关资源
      最近更新 更多