当前位置: 首页 > 面试题库 >

在循环中使用if语句?-处理

乜元魁
2023-03-14
问题内容

可以说我必须在for循环内使用if语句,并且for循环在特定条件下触发,而if语句仅在for循环达到特定阶段时才触发。

例如,条件是一个计数器,该计数器在发生某些事情(例如,球从屏幕上掉下来)时进行计数。每次球越过屏幕时,都会一圈绘制一个圆圈。当第一行中的圆圈到达屏幕的末端时,圆圈开始出现在第一行下方的第二行中。但是第二行对我不起作用,我已经用if语句实现了。

float BallY = 50; // y value of the ball
float BallX = 260; // x value of the ball
float ScoreX = 52;
float ScoreY = 40;
int counter;


void setup()
{
  size(512, 348); //width and height of screen
  counter = 0;
}

void draw()
{
  frameRate(600);
  background(255);
  fill(0);
  ellipse(BallX, BallY, 15, 15); //ball that will fall 
  BallY++; //ball's y value increases each frame
  if (BallY > height) //if ball's y value is greater than the screen
  {
    BallY = 0; //reset the y value of the ball back to 0
    counter++;
  }

  for (int i = 0; i < counter; i++) { 
    ellipse(ScoreX + i * 80, 40, 40, 40); // draw circles in the first row one by one

     if( ScoreX + i * 80 > width) // if the circles cross the width
     {
     i = 0; //reset i to be 0
     ellipse(ScoreX + i * 80, 80, 40, 40); // draw circles in the second row
     }
  }}

if语句仅在第一行的球越过宽度时才触发,但是整个游戏只是停止而不是在该行触发,似乎是问题所在?


问题答案:

初步建议:学习正确的Java编码约定,学习如何缩进代码,以及命名变量

对您的代码进行轻微的重写应该可以使可读的修正:

int scoreStartX = 52;
int scoreStartY = 40;
int scoreBallSize = 40;
// scorePosX/Y means the position the score-ball should be drawn
scorePosX = scoreStartX;  // scoreStartX/Y = starting position of score balls 
scorePosY = scoreStartY;

for (int i = 0; i < score; i++) { 
    ellipse(scorePosX , scorePosY , scoreBallSize , scoreBallSize);

    // increment the positions, and wrap to next col if over screen width
    scorePosX += scoreBallSize ;


   if( scorePosX  > screenWidth) { // next score ball position is beyond the screen
       scorePosX = scoreStartX;
       scorePosY += scoreBallSize;
   }
}

进一步重构代码以使用诸如Point之类的东西来表示坐标

Point scoreStartPos = new Point(52, 40);
int scoreBallSize = 40;
Point scorePos = new Point(scoreStartPos );

for (int i = 0; i < score; i++) { 
   drawCircle(scorePos, scoreBallSize); // a little helper method makes your code easier to read

    // increment the positions, and wrap to next col if over screen width
    scorePos.translate( +scoreBallSize, 0);


   if( scorePos.getX() > screenWidth) { // next score ball position is beyond the screen
       scorePos.setLocation(scoreStartPoint.getX(),
                            scorePos.getY() + scoreBallSize);
   }
}


 类似资料:
  • 我有一个380行20列的表格。我想从该表中删除符合特定条件的行。 为了澄清问题,假设我有以下列表: 我想删除在列表中找到姓名的所有人员的数据。 例如,假设我的数据如下所示: 我想删除、和的数据。所以输出应该是: 我的代码正在运行,但数据没有从我的原始数据中删除。当我打开新的测试.txt文件时,我可以看到数据没有被删除。 我可以肯定错误在< code > if data[row][0]= =(I f

  • 这个程序基本上允许用户输入任何单词,直到他/她输入单词“last”。 如果单词包含字母“s”,则应显示单词确实包含“s”或“s”,否则应显示单词不包含“s”或“s”。 示例:用户输入的单词= •约翰 詹姆斯 •馅饼 莎莉 结果: 约翰不包含's'或'S' James确实包含“s”或“s” 馅饼不含's'或'S' Sally不包含“s”或“s” 该程序可以工作,但我需要更改if语句,以便它使用equ

  • 问题内容: 目前无法打破此循环。如果要在此列表中找不到变量,我想破坏它,以便它可以移动另外两个循环。它期望在循环的顶部有一个缩进的块,但是如果更改循环的开头或开头的位置,它将无法正常工作。救命! 问题答案: 正如人们在对您的问题的评论中提到的那样,您需要分别打破每个循环,仅停止其所在的循环 两个 循环都需要这样做 如果您也想打破while循环,那么您也可以添加该循环。

  • 我正在为学校做一个简单的Java计算器,效果很好。但是,我需要添加一个while循环,询问用户是否要继续是/否。不过,我不知道应该将while语句放在哪里。我试着把if语句放在上面,我试着把它放在下面,然后把它添加到每个if和else if语句中,但仍然无法让它工作。在if和else-if语句中,应该在哪里放置while循环,以获得运行while循环的所有选项?

  • 我想使用for-loop-inside-echo语句,我使用了以下代码,但它的获取错误,有人能帮我吗? 这段代码是在ajax部分,所以我需要整个html作为一个变量,这样我就可以替换这部分错误就像这个语法错误,意外T_FORCI/应用程序/控制器/lha.php在748行

  • if语句 (实际上是if表达式) OCaml有两种if语句: if boolean-condition then expression if boolean-condition then expression else other-expression 不同于传统的语言,if语句是表达式。它们更类似于C类语言中的三元操作符?: 而不是你所熟悉的if语句。 下面是if语句的简单例子: # le