提问人:Malek Ghanem 提问时间:11/14/2023 最后编辑:khelwoodMalek Ghanem 更新时间:11/14/2023 访问量:31
在 java 中终止 Scanner 函数
Terminate a Scanner function in java
问:
当我终止 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.");
}
}
当我终止程序时,有时它会打印最后一条消息;大多数情况下,它会完全忽略最后一条消息。
答:
0赞
rzwitserloot
11/14/2023
#1
定义“终止”。如果结束标准输入,则返回 false,最后一条消息按预期打印。在某些系统上,这是 CTRL+Z(主要是 Windows)。在其他情况下,它是 CTRL+D。通常还可以告诉应用关闭,这通常会结束应用并结束输入,此时就是一场比赛。这通常使用 CTRL+C 完成(取决于操作系统)。data.hasNext()
如果这就是你正在做的事情:不要。告诉应用程序关闭然后问:好吧,但是,我想做点别的事情,这不是一件明智的事情。如果你坚持这样做,java 会让这变得非常困难,因为这种进程间通信的东西通常被称为“信号”,它在操作系统之间是不同的,而且 java 认为那些不能在 java 运行的所有平台上轻松统一地完成的事情,最好根本不做,因此很少在其特定于操作系统的 API 中公开功能。其中包括信号:试图“捕捉”“关闭应用程序”的信号是很棘手的。
通常,应用程序只是在应用程序本身内部执行此信号。例如,通过定义一些表示“实际上,退出”的哨兵值。下面是一个示例:
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()){
String next = data.next();
if (next.equalsIgnoreCase("done")) break;
int v = Integer.parseInt(next);
if(v == n) counter++;
}
System.out.println("Number " + n + " occurred " + counter + " times.");
}
}
此代码与此代码类似,但如果您输入“完成”而不是数字,则会导致应用程序关闭(并打印您的消息)。
或者更简单,您可以声明“0”会导致应用程序终止,然后您可以保留 ..nextInt()
评论