Итак, моя программа запускается и рисует ряд алмазов, начиная с верхнего правого. Затем он перемещается вниз и повторяется. Он ДОЛЖЕН остановиться на 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(); };
}
Как я вижу это: последний цикл должен начинаться при к == 1, а затем увеличить к на единицу каждый раз. и НЕ ДОЛЖНО повторять прошлое 4 из-за
for (int k=1 ; (j>=7)&&**(k<=4)** ; j=j-7 , k++)
Пожалуйста, помогите! :)
EDIT: Хорошо, поэтому я определенно проблема ... объяснить ПОЧЕМУ Я сбрасываю J: Когда я не сбросил 7 в семь, он нарисовал бы первую строку, а затем она будет бесконечно петля шаг, который перемещается в новую строку. Так что это прекратило бы рисование и просто переместило бы «Вниз», «Вправо», «Вниз», «Вправо», «Вниз», «Вправо» ... и т. Д.)
Добавление j = j-7 исправил эту проблему, но начал эту новую .. Какой я THUUGHT быть фиксированным из к < = 4 НЕ быть правдой ... любая причина, кажется, «игнорирование», что булева
EDIT2: Исправлено: Изменен последний для заявления к этому, если заявление:
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;
Спасибо всем, кто мне помог! Удивительный ответ на этом сайте!
Это не игнорирование k - k сбрасывается 1 каждый раз, когда внешний контур возобновляет самый внутренний цикл. Затем он повторяется с 1-4, но когда внешний контур возвращается ... получает сброс до 1. – coderabbi