2011-04-07 31 views
1

我是一名學生,我決定嘗試一下UVA Online Judge的一些問題集以幫助提高我的技能。第一個問題我碰到了一堵磚牆。在對付編譯器錯誤(我最後發現了一些在他們的論壇中提交Java代碼的模糊指導)之後,我現在已經畢業於「錯誤答案」狀態。Scanner.nextLine()不返回null?

要到一點 - 如果我不與周圍一個try/catch這個while循環,它在調用Integer.parseInt()輸入字符串""在運行時生成NumberFormatException。這是有道理的,除非輸入是""那麼它是null並且不應該進入循環。

我試過擺脫split(" ")並使用StringTokenizer,但這會產生錯誤的索引異常。

該程序工作正常,直到我通過按Enter鍵結束輸入。那是錯誤產生的時候。如果我用try/catch包圍循環,沒有錯誤,但控制檯似乎會拋出額外的換行符,並且我認爲這是我的「錯誤答案」狀態的來源。

我在做什麼錯?

public static void main(String[] args){ 
    Scanner kb = new Scanner(System.in); 
    String input; 
    String[] temp; 
    int i, j; 

    while((input = kb.nextLine()) != null){ 
     temp = input.split(" "); 
     i = Integer.parseInt(temp[0]); 
     j = Integer.parseInt(temp[1]); 
     solve(i, j); 
    } 
} 
+3

空字符串不是'null' ... – krookedking 2011-04-07 12:55:54

+0

http://stackoverflow.com/questions/4802015/difference-between-null-and-java-string – Ishtar 2011-04-07 13:22:03

回答

5

它爲什麼你期待kb.nextLine()輸入空行時返回null目前還不清楚。您應該比較""而不是null

在致電kb.nextLine()之前,您還應該檢查kb.hasNextLine()

public static void main(String[] args){ 
    Scanner kb = new Scanner(System.in); 
    String[] temp; 
    int i, j; 

    while (kb.hasNextLine()) { 
     String input = kb.nextLine(); 
     if (input.equals("")) break; 
     temp = input.split(" "); 
     i = Integer.parseInt(temp[0]); 
     j = Integer.parseInt(temp[1]); 
     solve(i, j); 
    } 
} 
+0

謝謝(和其他響應者)。我的一個新手錯誤! – spedsal 2011-04-07 13:25:29

0

有一個下一行,所以它不會返回null它只是該行是空的,因此""