所以我的程序运行并从右上角开始绘制一排菱形。然后,它向下移动一行并重复。它应该停止在4行(由于画布大小),但它不会!
重复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加1。
for (int k=1 ; (j>=7)&&**(k<=4)** ; j=j-7 , k++)请帮帮忙!:)
编辑:好的,所以j绝对是问题所在……为了解释我为什么重置J:,当我在7点没有重置7的时候,它会画出第一行,然后它会无限循环移动到新行的步骤。所以它会停止绘制,只是移动“向下,向右,向下,向下,向右...”等等。
添加j=j-7修复了这个问题,但启动了这个新问题。我以为这会因为k<=4不是真的而被修复。有什么理由让它看起来“忽略”这个布尔值?
EDIT2: Fixed:将最后的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;感谢所有帮助过我的人!令人惊叹的反应在这个网站上!
发布于 2012-10-15 09:39:26
它不会重复超过4点...在那个循环中。问题是最里面的循环被运行了无限次,所以它从1-4循环,然后从1-4循环,然后从1-4循环,等等。
为什么这个循环会被无限次地运行?
看起来你在最里面和最外面的循环中的终结器是不一致的。由于在最里面的循环中,每次j增加到超过7时,都会从j中减去7,并且只要j小于或等于7,最外面的循环就会运行,所以决不允许j变得足够大,以便最外面的循环终止。这意味着最里面的循环一遍又一遍地运行(因为最外面的循环是无限的),1-4,1-4,1-4……
发布于 2012-10-15 09:37:29
有没有可能您引用的行中的j= j -7没有在j上的第一个for循环中破坏您的意图?
发布于 2012-10-15 09:37:54
在最外层的循环中递增j,在最内层的循环中重置j。这似乎是在自找麻烦。最里面的循环保证j永远不会是7或更大,因此最外面的循环永远不会终止。
我会进行重构,这样除了在外部for语句中修改j之外,不会修改其他内容。
我还建议您使用调试器来查看是怎么回事。
https://stackoverflow.com/questions/12888231
复制相似问题