2017-04-25 67 views
2

所以,基本上我想要做的是有一個百分比。所以它增加了0%,1%等等,但是,我沒有把它全部打印出來,而是希望將%1換成2%。所以我知道如何做基本的for循環,但我不知道如何使用\r\b,因爲在我的編譯器中,我所得到的是將它全部打印在一行中。更新java控制檯而不打印新行

package test; 

public class est 
{ 
    public static void main(String[] args) 
    {  
     for(int i = 0; i <= 100; i++) 
     { 
      System.out.print("\rPercent = " + i + "%"); 
     } 
    } 
} 

輸出:

Percent = 0% 
Percent = 1% 

...

Percent = 99% 
Percent = 100% 

所以它打印100線;但我只想在一行上提供這些信息。

+0

\ r應該工作,但一些終端不支持它。 – arataj

+0

請參閱https://sourceforge.net/projects/javacurses/ –

+2

或https://stackoverflow.com/questions/439799/whats-a-good-java-curses-like-library-for-terminal-applications –

回答

2

簡單的答案是:當您努力提供「增強的用戶體驗」時,System.out不是一個適當的基礎。也許在這種情況下,您可以使用\ r在同一行上刪除。但只要你需要/想要做一個println()上下文是固定的;你不能再改變它了。

即使如此:「回去」和擦除信息不能以在每個平臺上工作的方式完成。

你有三個選擇:

  • 簡單地接受它。在現實世界中,命令行輸出通常很難看,大多數人都接受。
  • 看着基於「curses」的庫,因爲那些允許「放置」和「重置」你的「光標」。但我實際上無法說出這些庫是如何獨立於平臺的。
  • 往下九碼,考慮創建一個真正的指南。但是,當然,這是解決您的問題的最昂貴的解決方案。
+0

當你努力提供「增強的用戶體驗」時,_System.out不是一個適當的基礎_...是否有適當的基礎? – CodingNinja

+0

所以不能更新控制檯,或者在控制檯中替換文本? – CodingNinja

+0

抱歉,那是因爲我對你說的話感到困惑。我打算重新註冊它,但卻因爲一個新問題而受到阻撓。我現在剛剛投票。 :D – CodingNinja

1

我試圖在系統輸出使用「\ r」和它的IntelliJ IDEA控制檯&工作對我來說,從Mac OSX上的終端運行它。

public static void main(String[] a) throws InterruptedException { 
    int progress = 10; 
    for(progress = 10; progress<=100; progress+=10) { 
     System.out.print("\rPercent = " + (progress) + "%"); 
     Thread.sleep(3000); 
    } 
} 

您可能想嘗試一下。然而,我堅信它將依賴於底層的控制檯和操作系統。

+0

當我嘗試運行它時,它在eclipse上不起作用,它會打印單獨的行。但是,當我在終端上運行它時,它運行得非常好。不錯的工作。 – CodingNinja