Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何检查输入是否为整数并重复,直到收到有效输入_Java_Validation - Fatal编程技术网

Java 如何检查输入是否为整数并重复,直到收到有效输入

Java 如何检查输入是否为整数并重复,直到收到有效输入,java,validation,Java,Validation,我有一个计算工资率的简单程序。我知道应该使用一个简单的while语句,但不确定如何最好地实现它。基本上,我可以反复询问工资率,直到收到一个整数 例如,如果用户输入“cat”,系统应显示一条警告消息,并继续打印该消息,直到收到一个整数 我所拥有的: System.out.println("Please enter your hourly pay rate"); if(user_input.hasNextInt()){ payment = user_input.nextInt

我有一个计算工资率的简单程序。我知道应该使用一个简单的while语句,但不确定如何最好地实现它。基本上,我可以反复询问工资率,直到收到一个整数

例如,如果用户输入“cat”,系统应显示一条警告消息,并继续打印该消息,直到收到一个整数

我所拥有的:

System.out.println("Please enter your hourly pay rate");
    if(user_input.hasNextInt()){
        payment = user_input.nextInt();
        System.out.println("Your hourly pay rate is " + payment + " dollars p/h");
    }
    else{
        System.out.println("Please enter a valid input");
    }

正如@Luke Park提到的,你可以

while(!user_input.hasNextInt()){
    System.out.println("Please enter a valid input");
}
payment = user_input.nextInt();
System.out.println("Your hourly pay rate is " + payment + " dollars p/h");

将do while循环与无限循环一起使用。找到int值后,中断循环。使用try catch处理其他输入的异常抛出

    do {
      System.out.println("Please enter your hourly pay rate");
      String str = user_input.nextLine();
      try {
        payment = Integer.parseInt(str.trim());
        if (payment <= 0) {
          System.out.println("Please enter a valid input");
          continue;
        }
        System.out.println("Your hourly pay rate is " + payment + " dollars p/h");
        break;
      }
      catch (NumberFormatException e) {
        System.out.println("Please enter a valid input");
      }
    } while (true);
这是我做的

    boolean gotIn = false;
    while (!gotIn) {
        try {
            System.out.print("Enter number ");
            Scanner scan = new Scanner(System.in);
            System.out.println(scan.nextInt());
            scan.close();
            gotIn = true;
        } catch (RuntimeException nfe) {
            System.err.println("Invalid input, Enter only numbers ");
        }
    }

但是每次创建一个新的扫描仪,@YoungHobbit solution是正确的。

为什么
而(!user\u input.hasnetint())
是不可接受的?你测试过这个吗?对于任何一个错误的输入,它都会进入无限循环。我不这么认为。你能提供,你是如何运行它的。对我有效,我想知道这是否适用于负整数或0?@shellpottassium它适用于任何整数,请尝试一下。抱歉,措辞不正确。我是否也可以检查负整数/0作为输入(显然,因为它们也无效)。它可以工作,我尝试使用
nextLine()
而不是
nextLine()
:(
    boolean gotIn = false;
    while (!gotIn) {
        try {
            System.out.print("Enter number ");
            Scanner scan = new Scanner(System.in);
            System.out.println(scan.nextInt());
            scan.close();
            gotIn = true;
        } catch (RuntimeException nfe) {
            System.err.println("Invalid input, Enter only numbers ");
        }
    }