import java.util.Scanner;
class newClass {
public static void main(String args[]) {
Scanner s = new Scanner(System.in);
while (s.hasNext()) {
System.out.println(s.next());
}
s.close();
}
}
此程序不会返回提示(我已通过终端运行它)。这是为什么?我该如何纠正?
答案 0 :(得分:6)
此程序不会返回提示(我已通过终端运行它)。为什么?
因为s.hasNext()
将阻塞,直到有更多输入可用,并且只有在遇到流结束时才会返回false。
来自文档:
如果此扫描器的输入中有另一个标记,则返回true。 此方法可能会在等待输入扫描时阻止。
在unix系统上,您可以通过键入 Ctrl + D 来结束流,这会正确地将控制返回到提示符,(或通过键入终止整个程序) CTRL + C )。
如何更正?
你可以
System.in.close()
。答案 1 :(得分:3)
这是对上述评论的回复。在这里,应用程序将在收到“退出”时退出。
import java.util.Scanner;
class newClass {
public static void main(String args[]) {
Scanner s = new Scanner(System.in);
while (s.hasNext()) {
String temp = s.next();
if(temp.trim().equals("quit"))
System.exit(0);
System.out.println(s.next());
}
s.close();
}
}
答案 2 :(得分:1)
扫描仪将阻止等待来自System.in(标准输入)的输入。你必须按Ctrl + C退出程序,按Ctrl + D关闭输入流或给循环一个退出条件(比如输入“quit”),你可以这样做:
import java.util.Scanner;
class newClass {
public static void main(String args[]) {
Scanner s = new Scanner(System.in);
while (s.hasNext()) {
String nextVal = s.next();
if (nextVal.equalsIgnoreCase("quit")) { break; }
System.out.println(nextVal);
}
s.close();
}
}