2016-04-09 4 views
1

У меня есть небольшой код, который отображает обратный отсчет в консоли.Возможно ли в Java отображать результаты цикла for только в одном выводе?

for(int i = this.roundTimerMinute; i > -1; i--) 
    { 
     for(int j = this.roundTimerSeconds; j > 0; j--) 
     { 

      if(j < 10) 
      { 
       System.out.println(i + ":0" + j); 
      } 
      else if(!(i == 0 && j == 60) && (j < 56 && i == 1)) 
      { 
       System.out.println(i + ":" + j); 
      } 
      else if(i == 0 && j != 60) 
      { 
       System.out.println(i + ":" + j); 
      } 

      if(i == 0 && j == 60) 
      { 
       System.out.println("1:00"); 
      } 

      try { 
       Thread.sleep(1000); 
      } catch (InterruptedException e) {} 
     } 
    } 

В настоящее время выход что-то вроде:

1:55 
1:54 
1:53 
. 
. 
. 

ли можно отобразить весь обратный отсчет времени только в одной строке. Не последовательно, но новый Println() overdisplays старый так:

1:55 (this display is overridden 1 seconds later by 1:54 and so on) 

Я был бы признателен за любую помощь. Благодаря

Maged

Edit: Так он работает с командой/г, но только в CMD самой Windows. Может быть, это ошибка, но она отвечает на мой вопрос. Спасибо :)

ответ

2

Да, использовать print, а не println и добавить "\r" в конце каждого выхода:

например, System.out.println(i + ":0" + j + "\r");

Когда вы используете println, он делает 2 вещи: перемещается на следующую строку (строка) и возвращает курсор к началу строки (возврат каретки). Подумайте об этом, как пишущая машинка :-)

Если вы вручную напечатали "\r" (только возврат каретки), не переходя к следующей строке, тогда следующее, что вы напечатаете, перезапишет предыдущее содержимое строки.

+0

Я просто попробовал это. Я не работаю для меня.Он по-прежнему отображает каждое число под друг друга. Как и с System.out.println() – MageDWizard

+0

Вы используете свой код из командной строки или из вашего редактора/среды IDE? – mikej

+0

Я использую Eclipse как IDE. Таким образом, код работает в IDE – MageDWizard

0

Вы можете попробовать это: Java: Updating text in the command-line without a new line

Вы можете использовать «\ г» для возврата каретки без использования \ N, которая является новой строкой. Возврат каретки должен вернуть вас в начало линии.

0

Вы хотите написать что-то на свой терминал (например, 1:59), а затем стереть его и переписать его с чем-то еще (например, 1:58)? Если да, то нет нет простого способа сделать это с помощью обычных методов System.out. Вам нужно знать о для вашей ОС и типа терминала или, возможно, использовать библиотеку, такую ​​как один из предложенных here (я не пробовал ни одного из них, это именно то, что вернул мне Google).

0

Вы ищете библиотеку Curses.

В большинстве реализаций проклятий используется база данных, которая может описывать возможности тысяч различных терминалов. Существует несколько реализаций, таких как PDCurses, которые используют специализированные драйверы устройств, а не базу данных терминалов. Большинство реализаций используют terminfo; некоторые использование termcap.

Есть несколько Java Проклинает библиотеки, описанные в What's a good Java, curses-like, library for terminal applications?

Это может показаться не так много, но в противном случае вы будете нуждаться в возможности терминала базу данных самостоятельно для этой одной функции.