sc.hasNextLine()永远不会结束,陷入循环

时间:2014-12-17 14:51:32

标签: java java.util.scanner

我试图写一个从键盘输入的读取方法。但输入是一个大文本,需要一次分析一行。

risks = new ArrayList<String>();

    try{
        Scanner sc = new Scanner(in);
        //number of updates
        numberOfUpdates = Integer.parseInt(sc.next());
        //constant cost per bundle
        constantCost = Integer.parseInt(sc.next());
        String line = null;
        while(sc.hasNext()){
            line = sc.nextLine();
            risks.add(line);
        }
        sc.close();

    }         
    catch(NullPointerException e){
        e.printStackTrace();
    }
    return 0;
}

代码永远不会结束,除非我使用CTRL + Z然后停止并读取其余代码,如果我不停留在无限循环中,我该如何自动关闭它。我认为line = sc.nextLine();会这样做,但它根本没有帮助。

2 个答案:

答案 0 :(得分:1)

如果我们可以假设inSystem.in,那么你的while循环永远不会终止,因为System.in永远不会结束,所以说。举个简单的例子:

Scanner scanner = new Scanner(System.in);

while (scanner.hasNext()) { //Never terminates
    System.out.println(scanner.nextLine());
}

这个while循环永远不会终止。相反,请尝试使用关键字来结束循环,例如"continue"

Scanner scanner = new Scanner(System.in);
String s;

while(!(s = scanner.nextLine()).equals("continue")) {
    System.out.println(s);
} 

只要用户输入“继续”并将nextLine()分配给s,就会终止此操作,这可以在循环中使用。

所以在你的情况下:

String s;

while(!(s = scanner.nextLine()).equals("continue")){
    risks.add(s);
}

答案 1 :(得分:0)

添加停止条件,说用户输入“已完成”

while(true){
   line = sc.nextLine();
   if(line.equals("done")
     break;
   risks.add(line);
}