Scanner.nextLine()没有返回null?

时间:2011-04-07 12:52:57

标签: java

我是学生,我决定在UVa Online Judge尝试一些问题集,以帮助提高我的技能。在第一个问题上,我遇到了一堵砖墙。在打击编译器错误之后(我最终发现了一些在他们的论坛中提交Java代码的模糊指南),我现在已经毕业于“错误答案”状态。

为了达到目的 - 如果我没有用try / catch包围这个while循环,它会在调用{{1}时在输入字符NumberFormatException上运行时生成"" }}。这是有道理的,除非输入是Integer.parseInt()然后它是""并且不应该进入循环。

我尝试删除null并使用split(" "),但这会产生错误的索引异常。

程序运行正常,直到我按Enter键结束输入。那是错误产生的时候。如果我用try / catch包围循环,那么没有错误,但是控制台似乎会抛出额外的换行符,我相信这是我“错误答案”状态的来源。

我做错了什么?

StringTokenizer

2 个答案:

答案 0 :(得分:5)

目前还不清楚为什么当输入空行时,您希望kb.nextLine()返回null。您应该与""进行比较,而不是null

在致电kb.hasNextLine()之前,您还应该检查kb.nextLine()

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);
     }
}

答案 1 :(得分:0)

有下一行,所以它不会返回null,只是该行为空,因此""