2014-03-01 34 views
0

爲什麼不打印「完成」?循環掃描輸入後無法打印行 - Java

public class Main { 


public static void main(String[] args) { 

    Scanner s = new Scanner(System.in); 

    while (s.hasNext()) { 

     System.out.println(s.nextInt()); 

    } 

    System.out.println("done"); 

} 

} 

它打印輸入就好,但不打印完成的單詞。

編輯如果空間在控制檯中分離出來,然後我輸入整數按下Enter鍵,它打印我在一個單獨的行中輸入的所有整數,但它只是不打印畢竟是

完成的字

編輯

這個工程......但似乎不是很優雅

public class Main { 


public static void main(String[] args) { 

    Scanner s = new Scanner(System.in); 

    int temp; 

    while (s.hasNext()) { 

     temp = s.nextInt(); 

     if (temp != -99) { 
      System.out.println(temp); 
     } else { 
      break; 
     } 

    } 



    System.out.println("done"); 

} 

} 
+0

輸入流是否結束? (在Linux上按Ctrl-D,在Windows上按Ctrl-Z然後輸入) – immibis

+0

我不知道我理解你的問題。如果掃描儀hasNext()但它是空的,它不應該繼續打印0嗎? – A2345sooted

+0

它會等到你輸入一些東西。如果您正在從文件中讀取文件,並且您到達文件末尾,或者您正在從網絡連接讀取並且服務器已關閉連接,則hasNext會返回false。 – immibis

回答

1

您所看到的是Scanner在沒有字符的輸入流上阻塞,並且正在等待更多。爲了表示流的結束,必須發送'流結束'字符。這是Linux上的ctrl-d。

來自java.util.Scanner的文檔(http://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html)。

Both hasNext 
and next methods may block waiting for further input. Whether a hasNext method 
blocks has no connection to whether or not its associated next method will block. 

例如,從Linux命令提示

> javac Main.java 
> java Main 
> 810 
810 
> 22 
22 
> foo 
java.util.InputMismatchException 
> java Main 
> 1 
1 
> ctrl-D 
done 

的另一種方法來測試,這是呼應的線或貓一個文件到程序:

> echo 2 | java Main 
2 
done 

編輯:

鑑於下面評論中描述的預期結果;嘗試以下方法,它將只讀取一行。解析分隔出來的空間,每行回顯一行,然後打印完成。

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


/** 
* 
*/ 
public class Main { 


    public static void main(String[] args) throws IOException { 

     String str = new BufferedReader(new InputStreamReader(System.in)).readLine(); 

     Scanner s = new Scanner(str); 

     while (s.hasNext()) { 

      System.out.println(s.nextInt()); 

     } 

     System.out.println("done"); 

    } 

} 

編輯編輯:清理了答案,並從評論的信息工作。

+0

因此,如果我輸入輸入整數,然後按回車,它打印整數,但沒有'完成'...然後,如果我按Ctrl - D,它打印'完成'...但我需要這個發生後,我進入最後一個整數 – A2345sooted

+0

輸入輸入時是否需要這種行爲,或者是否可以從另一個文件中將其輸入?你在運行什麼平臺,linux,windows,osx? –

+0

當我運行該程序時,我需要能夠輸入由空格分隔的整數,然後按回車並讓它運行一切...不能按ctrl-d或任何東西...擊中輸入應通過完成恢復程序 – A2345sooted