2011-11-09 27 views
0

私はこのlinkに掲載されている前と同じ問題があります。 私はなぜ、私はもう一度試してみましたが、今度はEclipseを使って試しました(私はリンクでNetbeansを使いました)。私は厳密に間違っているこの結果を得る。 UVAToolkitでは、誤ったホワイトスペースが間違った答えを返すことがありました。終了していないJavaプログラム2

場合によっては、私は代わりにBufferedReaderを使用する必要がありますか?

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

コード[注:メイン(文字列[]引数)に位置する方法]

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、その答えは正しいでしょうか?私はそれらのほとんどを試しましたが、すべての返された同じ出力コメントは5分間しか編集できません –

答えて

0

次のコードは、空の文字列でない場合はinputの結果文字列を表示し、完了したら「完了」を表示します。

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経由でファイルへの入力を変更すると、正しい出力が正しく表示されます。空白を避けるのは難しいと私は同意します。 –

関連する問題