Java中的Scanner函数

xqnpmsa8  于 2023-11-15  发布在  Java
关注(0)|答案(1)|浏览(111)

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

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

jmp7cifd

jmp7cifd1#

定义'terminate'。如果你结束标准输入,data.hasNext()返回false,最后一条消息按预期打印。在某些系统上,这是CTRL+Z(主要是Windows)。在其他系统上,它是CTRL+D。你通常还可以 * 告诉应用程序关闭 *,这通常会结束应用程序 * 并 * 结束输入,此时它是一场比赛。这通常是用CTRL+C完成的(取决于操作系统)。
如果这就是你正在做的事情:不要。告诉一个应用程序关闭,然后问:好的,但是,我想做一些 * 其他 * 的事情。如果你坚持这样做,java会让这变得非常困难,因为这种进程间通信的东西通常被称为“信号”,它在操作系统之间是不同的,Java认为,那些不能在Java运行的所有平台上轻松统一完成的事情,最好根本不做,因此很少在其特定于操作系统的API中公开功能。其中包括信号:试图“捕捉”“关闭应用程序”信号是棘手的。
通常应用程序只是在应用程序本身内部发出这种信号。例如,通过定义一些sentinel值,表示“实际上,退出”。下面是一个例子:

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.");
  }
}

字符串
此代码类似,但如果您输入'done'而不是数字,则会导致应用程序关闭(并打印消息)。
或者更简单,你可以声明'0'导致应用程序终止,然后你可以保留.nextInt()

相关问题