所以我的程序运行并从右上角开始绘制一排钻石。然后它向下移动并重复。它应该停在4行(由于画布大小),但它不会!
首先为声明绘制钻石。声明的第二个移动到下一个钻石。重复7次。
第三个声明(这是我假设问题是......)向下移动并重复前两个。
所有这些都完美运行!直到它没有停止!
它不断无限重复!
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。因为
,它不应该重复过去4for (int k=1 ; (j>=7)&&**(k<=4)** ; j=j-7 , k++)
请帮忙! :)
编辑:好的,所以j肯定是问题...解释为什么我要重置J: 当我没有在7处重置7时它将绘制第一行然后它将无限循环移动到新行的步骤。所以它会停止绘制,只是移动“向下,向右,向下,向右,向下,向右......等等。添加j = j-7解决了这个问题但开始了这个新问题.. 由于k&lt; = 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;
感谢所有帮助过我的人!在这个网站上的惊人回应!
答案 0 :(得分:0)
您引用的行中的j = j-7是否可能在j的第一个for循环中没有搞砸你的意图?
答案 1 :(得分:0)
在最外层循环中递增j
,然后在最里面的循环中重置j
。这似乎是在寻找麻烦。最内层循环保证j
永远不会是7或更多,因此最外层循环永远不会终止。
我会重构,以便除了在外j
语句中之外不修改for
。
我还建议逐步使用调试器来查看正在发生的事情。
答案 2 :(得分:0)
看起来问题是j=j-7
- 只有当j大于或等于7且k小于4时,你的循环才会停止。因为j
在每次迭代时递减7,你的病情永远无法满足。
答案 3 :(得分:0)
它不会在该循环中重复过去4 ... 。问题是最里面的循环运行无限次,所以它从1-4循环,然后从1-4循环,然后从1-4循环,等等。
为什么循环运行无限次?
似乎你的终结者在最里面&amp;最外面的循环是不一致的。由于每次增加超过7时从最内层循环中的j减去7,并且只要j小于或等于7,最外面的循环就会运行,j永远不会变得足够大以使最外层循环终止。这意味着最里面的循环一遍又一遍地运行(因为无尽的最外层循环),1-4,1-4,1-4 ......