当我终止Scanner函数时,由于某种原因,它不打印代码中的最后一条消息。我尝试搜索,但没有找到解决方案。
这是我的代码:
import java.util.Scanner;
public class E2{
public static void main(String[] args) {
int n = Integer.parseInt(args[0]);
Scanner data = new Scanner(System.in);
// Your code here
int counter = 0;
while(data.hasNext()){
if(data.nextInt() == n){
counter++;
}
}
System.out.println("Number " + n + " occurred " + counter + " times.");
}
}
字符串
当我终止程序时,有时它会打印最后一条消息;大多数时候它会完全忽略最后一条消息。
1条答案
按热度按时间jmp7cifd1#
定义'terminate'。如果你结束标准输入,
data.hasNext()
返回false,最后一条消息按预期打印。在某些系统上,这是CTRL+Z(主要是Windows)。在其他系统上,它是CTRL+D。你通常还可以 * 告诉应用程序关闭 *,这通常会结束应用程序 * 并 * 结束输入,此时它是一场比赛。这通常是用CTRL+C完成的(取决于操作系统)。如果这就是你正在做的事情:不要。告诉一个应用程序关闭,然后问:好的,但是,我想做一些 * 其他 * 的事情。如果你坚持这样做,java会让这变得非常困难,因为这种进程间通信的东西通常被称为“信号”,它在操作系统之间是不同的,Java认为,那些不能在Java运行的所有平台上轻松统一完成的事情,最好根本不做,因此很少在其特定于操作系统的API中公开功能。其中包括信号:试图“捕捉”“关闭应用程序”信号是棘手的。
通常应用程序只是在应用程序本身内部发出这种信号。例如,通过定义一些sentinel值,表示“实际上,退出”。下面是一个例子:
字符串
此代码类似,但如果您输入'done'而不是数字,则会导致应用程序关闭(并打印消息)。
或者更简单,你可以声明'0'导致应用程序终止,然后你可以保留
.nextInt()
。