在 java 中终止 Scanner 函数

Terminate a Scanner function in java

提问人:Malek Ghanem 提问时间:11/14/2023 最后编辑:khelwoodMalek Ghanem 更新时间:11/14/2023 访问量:31

问:

当我终止 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.");
  }
}

当我终止程序时,有时它会打印最后一条消息;大多数情况下,它会完全忽略最后一条消息。

Java Windows 终端 java.util.scanner

评论


答:

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()