java Scanner强制用户输入int值

时间:2015-06-25 17:05:48

标签: java loops input nosuchelementexception

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类之外使用扫描器,那就会出错...

3 个答案:

答案 0 :(得分:1)

如果您希望用户输入并且扫描仪仅提取整数值,则Scanner提供方法:

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;已经有了这个方法名。不要忘记导入

答案 1 :(得分:0)

你可以这样做:

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;
}

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

答案 2 :(得分:0)

这很有效。肯定有更好的解决方案。

编辑正如预测的那样。检查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);
  }
}