2011-04-07 34 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它只是该行是空的,因此""