我想阅读用户输入,如:11 12 13 14 15 16
Scanner sc = new Scanner(System.in);
while(sc.hasNext()){
System.out.println(sc.next());
}
System.out.println("Test");
但是它更新于while循环并打印"测试"。 我怎么能读到那个输入?
答案 0 :(得分:2)
方法hasNext()
的工作原理如下:
通常,如果你对文件使用Scanner
,这样的循环将正常工作,因为文件有一个明确的结束,它通常不会卡在等待更多的输入。
但是当您使用控制台输入(System.in
,而不是重定向)时,通常用户不会发送文件结束信号。他只按 Return ,所以,hasNext()
坐下来等待用户是否会在下一行输入更多输入,依此类推。
有两种一般方法可以解决这个问题:
用户必须实际终止输入。输入完所有数字并按返回后,还需要发送文件结束序列,通常是 ctrl D 或 ctrl Z 。
如果您这样做,您将无法再输入该程序。
程序告诉用户输入一些特定的值,告诉它输入结束。例如,字符串" DONE"。当你这样做时,你必须将循环更改为:
String nextInput;
while( sc.hasNext() && ! (nextInput = sc.next()).equals( "DONE" ) ){
System.out.println(nextInput);
}
答案 1 :(得分:1)
根据您是否要退出,您可以打破循环。
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while(sc.hasNext()){
String next = sc.next();
if (next.equals("q")) { //if user press q then break the loop
break;
}
System.out.println(next);
}
System.out.println("Test");
}
答案 2 :(得分:1)
使用api:
while(sc.hasNextInt()){
int aba= sc.nextInt();
if (aba == 0) {//or even non numeric value here would let this loop exit
break;
}
}
所以你需要输入0或者甚至以其他方式输入非数值以便退出循环。 nextLine方法只读取整行一次,然后你需要解析它然后转换为整数,这样才能使用sc.nextInt,这将为你完成工作。