2011-11-09 73 views
0

我遇到了與之前發佈在link中相同的問題。 我不是爲什麼,但當我再次嘗試,但這次使用Eclipse(我在鏈接中使用Netbeans)。我得到這個嚴格錯誤的結果。在UVAToolkit中,誤導性的空白可能會返回錯誤的答案。非終止Java程序2

如果有機會,我應該使用BufferedReader嗎?

BufferedReader reader = new BufferedReader(InputStreamReader(System.in)); 

代碼[注意:位於主(字符串[] args)方法]

Scanner scanner = new Scanner(System.in); 
String line; 
while(!(line = scanner.nextLine()).equals("")) { 
    System.out.println(line); 
} 
System.out.println("done"); 

案例輸入:

[在 「1000」 的字符串的末尾沒有空白]
1 10 
1 100 
1 1000 

案例輸出[注:「新線」涉及一種白色空間進入]

1 10 
1 100 
"new-line" 
1 1000 
"new-line" 
done 
"new-line" 

正確的大小寫輸出[注:在「完成」字符串的結尾沒有空格]

1 10 
1 100 
1 1000 
done 

在此先感謝。

+1

[非終止Java程序]的可能重複(http://stackoverflow.com/questions/8062749/non-terminating-java-program) - 你第一次接受了一個可憐的答案;其他答案是正確的。 –

+0

* System.out.println(line); *將以「換行符」結束*每行*。 – JimmyB

+0

BrianRoach,哪個答案是正確的?我已經嘗試了其中大多數,但都返回相同的outputcomments可能只能編輯5分鐘 –

回答

0

以下代碼將顯示輸入的結果字符串,如果它不是空字符串,並在完成時顯示「完成」。

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 

public class ReadConsoleScanner { 
    public static void main(String[] args) { 
     boolean stop = false; 
     BufferedReader bufferRead = new BufferedReader(new InputStreamReader(System.in)); 
     String sWhatever = ""; 
     try { 
      while(!(stop = (sWhatever = bufferRead.readLine()).matches(""))){ 
       if (!stop) System.out.println(sWhatever); 
      } 
      System.out.println("done"); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

    } 
} 

關於你的預期低:

輸入大寫或小寫:無空白,在「1000」字符串的結尾]

我認爲這是很難找到一個避免作爲標記到循環所需的空格(空字符串),除非最終輸入預計爲「1 1000」,我們可以在其中更改循環的標記,如下所示:

while(!(stop = (sWhatever = bufferRead.readLine()).contains("1 1000"))){ 
    //whatever 
} 
+0

奇怪,當我通過FileReader將輸入從控制檯更改爲文件時,正確的輸出顯示正確。我同意你很難避免空格,參數。 –