Java Paint, если x = location, сделать это еще - PullRequest
1 голос
/ 05 декабря 2011

Я нахожусь на компьютере SCI AP, и я не могу понять, почему это не работает

public static void moon(Graphics g) {
    for(int k = 0; k < 550; k+=2) {
        if (k == 550) {     
            g.setColor(Color.blue);
            g.fillOval(k,50,50,50);
            for(long delay = 1; delay<10000000; delay++);   
            g.setColor(Color.white);
            g.fillOval(k,50,50,50); 
            k = 0;
        } else {
            g.setColor(Color.black);
            g.fillOval(k,50,50,50);
            for(long delay = 1; delay<10000000; delay++);   
            g.setColor(Color.white);
            g.fillOval(k,50,50,50); 
        }
    }
}

Так что в основном это заставит черный овал двигаться по экрану тогда, когда k =550 он заставит синий идти по экрану ... Но он не делает этого, он просто перемещает черный, затем, когда он достигает 550, он останавливается ... и синий не появляется.

Ответы [ 4 ]

3 голосов
/ 05 декабря 2011

Вы всегда будете вводить путь else, потому что ваш цикл for имеет значение от 0 до 549, поэтому k никогда не будет равно 550.

0 голосов
/ 05 декабря 2011

k никогда не будет 550, потому что ваше выражение k < 550.

Либо измените его на k <= 550, либо полностью переместите часть 550 за пределы цикла.

IMO, он на самом деле не входит в цикл, если это происходит только один раз, а другой n сто раз - нет. Лучше иметь внутренний цикл для всего остального и внешний цикл, который заставляет его работать вечно, а не изменять переменную цикла.

0 голосов
/ 05 декабря 2011
for(int k = 0; k < 550; k+=2)

будет цикл, но k не войдет в цикл со значением 550, поэтому ваш оператор if не будет выполнен вообще

используйте это

for(int k = 0; k <= 550; k+=2)
0 голосов
/ 05 декабря 2011

Ваш код никогда не достигает k = 550.
Условие в цикле for равно k < 550.Сделайте это k <= 550, и оно должно работать.

Однако вы можете этого не увидеть, потому что вы используете for(long delay = 1; delay<10000000; delay++); для задержки - это не очень надежный способ задержки.

Чтобы увидеть, что все происходит более надежно, попробуйте использовать Thread.sleep (long) .
Для записи, я считаю, есть некоторые аргументы против использования Thread.sleep(long) в целом, но в этом случае этодолжно хватить.

Пока я в этом, задание k = 0 излишне, это даже плохой стиль.Вы не должны назначать переменную цикла внутри цикла.Если цикл введен снова, часть for (int k=0 позаботится о настройке k на 0.

HTH

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...