我试图写一个从键盘输入的读取方法。但输入是一个大文本,需要一次分析一行。
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();
会这样做,但它根本没有帮助。
答案 0 :(得分:1)
如果我们可以假设in
是System.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);
}