2015-10-14 3 views
3

Для запуска этого кода, как предполагалось, используйте ваш cmd/terminal, а не IDE. (или вы не увидите правильного эффекта от \ r)Сложность печати на принтере

Когда 9 в терминале достигнут самого правого положения после 4-х пространств, он развернется и переместит 4 пространства и снова и снова. Однако, когда он достигает начальной точки после полного цикла, на втором пробеле остается 9, которые не очищаются с помощью \ r. Что может быть причиной этого?

public class Core { 
    public static void main(String[] args) throws InterruptedException { 

     int Array[][] = new int[4][6]; 
     int score; 
     boolean enemy = true; 
     boolean dir = true; 

     // EnemyLine 
     while (enemy) { 
      for (int i = 1;;) { 
       Thread.sleep(1000); 

       if (i == 1) 
        dir = true; 
       else if (i == 4) 
        dir = false; 
       if (dir == true) { 
        int a = Array[0][i] = 9; 
        System.out.printf("%" + i + "d", a); 
        i++; 
        System.out.print("\r"); 
        continue; 
       } else if (dir == false) { 
        int a = Array[0][i] = 9; 
        System.out.printf("%" + i + "d", a); 
        i--; 
        System.out.print("    \r"); 
        continue; 
       } 
      } 
     } 

    } 
} 
+1

Я не вижу здесь вопроса или проблемы (помимо проблемы с домашней работой). Запустите его в отладчике/IDE и посмотрите все переменные и окно вывода, чтобы выяснить, что происходит. Или просто сделайте это на бумаге (или в голове, это не слишком сложно). – KevinDTimm

+0

Ну, проблема в том, что на возврате leg \ r не очищает каждые 9. Я не могу найти, что вызывает это, и я пишу в eclipse и не могу найти ошибку. (в любом случае код не работает так, как предполагалось в eclipse, поскольку по какой-то причине он перескакивает строку, но в терминале все выходные данные происходят в одной строке) – heathbm

+1

Пара несвязанных комментариев по вашему коду: У вас есть 'if (dir == true) {...} else if (dir == false) {...} 'Ну, так как _dir_ является логическим, он может _only_ быть истинным или ложным, поэтому ваш if..else может быть' if (dir == true) {. ..} else/* dir должно быть false */{...} ' Кроме того, не проверяйте, является ли' some_boolean == true' просто test 'some_boolean':' if (dir) {...} else { ...} Это сбивает с толку, так как «dir» (направление?) Не говорит вам много чего: что означает 'dir == true'? Если это означает «перемещение вправо», а false означает «перемещение влево», переименуйте 'dir' в' movingRight' ... 'if (movingRight) {...} else {/ * move left * /}' –

ответ

3

Объясняя, почему вы получаете такой результат

В основном в цикле вы меняетесь, куда поместить возврат каретки \ г.

После завершения цикла, когда вы вернетесь к i = 1., вы меняете после того, сколько персонажей вы собираетесь выполнить возврат каретки.

1 -> _9\r 
2 -> __9\r 
3 -> ___9\r 
4 -> ____9  \r 
x3 -> ___9  \r 
x2 -> __9  \r 
x1 -> _9\r 

, таким образом, последнее утверждение не проясняет 9 на x2

необходимых изменений в случае (реж == TRUE)

System.out.print(" \r"); // enter a space before \r 

или было бы лучше использовать

System.out.print("    \r"); // preferable 

вы также можете удалить свой sysout \ r из цикла условий и использовать его перед тем, как сон Thread

System.out.print("  \r"); 
Thread.sleep(1000); 
+0

Спасибо за отзыв, теперь я использую ваш второй метод, и теперь я понимаю, где я изначально поступил не так. очень признателен. – heathbm

Смежные вопросы