0

所以我的程序运行并从右上角开始绘制一排菱形。然后它向下移动一行并重复。它应该停在 4 行(由于画布大小),但它不会!

首先 for 语句绘制一个菱形。第二个 for 语句移动到下一个菱形。重复 7 次。

第三个 for 语句(这是我假设问题所在..)向下移动一行并重复前两个。

所有这些都完美运行!直到它没有停止!

它只是无限期地重复!

import Media.*;
import static java.lang.Math.*;

public class DiamondTiles2 {

private TurtleDisplayer display;
private Turtle            steve;

public DiamondTiles2 (){

display = new TurtleDisplayer();
steve = new Turtle();
display.placeTurtle(steve);

steve.setSpeed(15);
steve.forward(140);             // Moves Steve to the furthest right he needs to be
steve.left(PI/2);
steve.forward((float)1.5*(40*sqrt(3.0)));  // Moves Steve to the top (up 1.5 times the height of a diamond)
steve.left(PI/6);
steve.penDown();

for (int j=1 ; j<=7 ; j++){  //Diamond Drawing
  steve.forward(40);
  steve.left(2*PI/3);        
  steve.forward(40);
  steve.left(PI/3);
  steve.forward(40);
  steve.left(2*PI/3);
  steve.forward(40);
  steve.left(PI/3);
  for (int i=1 ; i<=1 ; i++){ //Move to Next Diamond
    steve.penUp();
    steve.left(PI/3);
    steve.forward(40);
    steve.right(PI/3);
    steve.penDown();         
    for (int k=1 ; (j>=7)&&(k<=4) ; j=j-7 , k++){ //Move to next row
      steve.penUp();
      steve.right(7*PI/6);
      steve.forward((float)40*(sqrt(3.0)));
      steve.left(PI/2);
      steve.forward(280);
      steve.left(2*PI/3);
      steve.penDown();
    }
  }
}  
display.close();
};
public static void main ( String[] args ) { DiamondTiles2 d = new DiamondTiles2(); };
}

我看到它的方式:最后一个 for 循环应该从 k==1 开始,然后每次将 k 增加一。它不应该重复过去 4 点,因为

for (int k=1 ; (j>=7)&&**(k<=4)** ; j=j-7 , k++)

请帮忙!:)

编辑:好的,所以 j 绝对是问题...解释为什么我要重置 J:当我没有在七点重置 7 时,它会绘制第一行,然后它会无限循环移动到新的步骤排。所以它会停止绘图并只是移动“下,右,下,右,下,右......等。

添加 j=j-7 解决了这个问题,但开始了这个新问题。由于 k<=4 不是真的,我认为哪个会得到解决……有什么理由似乎“忽略”了那个布尔值?

EDIT2:固定:将最后一个 for 语句更改为此 IF 语句:

 if ((j>=7)&&(x<=3)){ //Move to next row
      steve.penUp();
      steve.right(7*PI/6);
      steve.forward((float)40*(sqrt(3.0)));
      steve.left(PI/2);
      steve.forward(280);
      steve.left(2*PI/3);
      steve.penDown();
      j=j-7;
      x=x+1;

感谢所有帮助过我的人!这个网站上的惊人反应!

4

4 回答 4

0

Is it possible that the j=j-7 in the line you referenced isn't screwing up your intention in the first for loop on j?

于 2012-10-15T01:37:29.220 回答
0

You increment j in your outermost loop and you reset j in the innermost loop. That seems like asking for trouble. The innermost loop guarantees that j will never be 7 or more, and therefore the outermost loop will never terminate.

I would refactor so that you don't modify j other than in the outer for statement.

I would also recommend stepping through with a debugger to see what's going on.

于 2012-10-15T01:37:54.300 回答
0

It looks like the problem is j=j-7 - your loop will only stop if j is greater than or equal to 7 and k is less than 4. Because j is decremented by 7 on each iteration, your condition can never be met.

于 2012-10-15T01:38:31.280 回答
0

它不会重复过去 4...在那个循环中。问题是最里面的循环运行了无数次,所以它从 1-4 循环,然后从 1-4 循环,然后从 1-4 循环,等等。

为什么该循环无限次运行?

似乎您在最内层和最外层循环中的终止符不一致。由于每次增加超过 7 时,最内层循环中的 j 都会从 j 中减去 7,并且只要 j 小于或等于 7,最外层循环就会运行,因此永远不允许 j 变得足够大以使最外层循环终止。这意味着最里面的循环一遍又一遍地运行(因为最外面的循环在无限循环中),1-4、1-4、1-4...

于 2012-10-15T01:39:26.080 回答