java 扫描器强制用户输入一个 int 值

java Scanner force user to input a int value

public class Main{
    public static void main(String args[]){
    int i = nextInt();
}
public int nextInt(){
    int i=0;
    boolean done=false;
    Scanner scanner = new Scanner(System.in);
    while (!scanner.hasNextInt()){
            scanner.nextLine();
        Printer.println(Printer.PLEASE_NUMBER);
    }
    i=scanner.nextInt();
    scanner.close();
    return i;
}
}

上面的代码是我试图强制用户输入一个 int 值的方式,但我得到了 nosuchelement 异常,因为 scanner.nextLine() 读取 NULL。 在 C++ 中,软件等待用户输入内容。我能做些什么来强制程序停止,等待用户输入内容然后进行检查吗?

编辑: 所以无论如何我都会遇到问题,如果我在 Main class 之外使用扫描仪,它会给出错误...

如果您希望用户输入并且扫描仪只拾取一个整数值,扫描仪提供了方法:

int i = scanner.nextInt();

其中 i 将存储输入到控制台的下一个值。如果 i 不是整数,它将抛出异常。

这是一个示例:假设我希望用户输入一个数字,然后我想将其吐回给用户。这是我的主要方法:

public static void main(String[] args) {
     Scanner sc = new Scanner(System.in);
     System.out.print("Please print your number: ");
     int i = sc.nextInt(); 
     System.out.println("Your Number is: " + i);
}

现在要检查 i 是否为整数,您可以使用 if 语句。但是,如果您希望程序重复执行直到用户输入整数,您可以使用 while 循环或 do while 循环,其中循环的参数将检查 i 是否为整数。

希望这就是您要找的!顺便说一下,避免将您的方法命名为 nextInt(),因为 import java.util.Scanner; 已经具有该方法名称。也不要忘记 imports

你可以这样做:

public static void main(String[] args) {
    System.out.println("" + nextInt());
}

public static int nextInt(){
    int i=0;
    boolean done=false;
    Scanner scanner = new Scanner(System.in);
    System.out.println("Please enter a number:");
    while (!scanner.hasNextInt()){
        System.out.println("Please enter a number:");
        scanner.nextLine();
    }
    i = scanner.nextInt();
    scanner.close();
    return i;
}

这将导致程序在每次执行循环时停止并等待输入。它会一直循环,直到它在 scanner.

中有一个 int

这行得通。肯定有更好的解决方案。

编辑 正如预测的那样。检查 this,

import java.util.Scanner;

public class NewMain{
  static boolean badNumber;
  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    do{
      System.out.print("Please print your number: ");
      try{
        int i = sc.nextInt(); 
        System.out.println("Your Number is: " + i);
        badNumber = false;
      }
      catch(Exception e){
        System.out.println("Bad number");
        sc.next();
        badNumber = true;
      }
    }while(badNumber);
  }
}