java在两次要求输入的情况下做

问题描述

为什么我需要输入2次?请帮助我是Java新手,找不到错误

do {
    System.out.println("Enter your age: ");
    age= in.nextInt();
    if(!in.hasNextInt()) {
        System.out.println("Please enter a valid age");
        in.nextInt();
        valid=false;
    }
}while(valid);

删除了do一会儿,但它仍然要求第二次输入

System.out.println("Enter your age: ");
age= in.nextInt();
if(!in.hasNextInt()) { //Will run till an integer input is found
    System.out.println("Please enter a valid age");
    in.nextInt();
    valid=false;
}

解决方法

我已经更新了您的代码。这将为您工作。

public class Example
{
    public static void main(String[] args) {
      boolean valid = true;  
      do {
          Scanner in = new Scanner(System.in);
          System.out.println("Enter your age: ");
          while(!in.hasNextInt()) {
             System.out.println("Please enter a valid age");
             in.next();
             valid = false;
          }
          int age = in.nextInt();
      } while(valid);
    }     
}

输出:

Enter your age:                                                                                                                                                          
2                                                                                                                                                                        
Enter your age:                                                                                                                                                          
seven                                                                                                                                                                   
Please enter a valid age                                                                                                                                                 
seven                                                                                                                                                                   
Please enter a valid age                                                                                                                                                 
3 

说明::如果要提供有效的数据,则循环将继续接受输入(不会两次接受输入)。一旦您提供了无效数据,那么代码将提示您输入有效数据,并且循环将在您执行valid = false时停止执行。

,

之所以要求您两次输入,是因为您in.hasNextInt()将检查扫描仪是否有来自系统的输入。由于由于调用age = in.nextInt();而导致系统没有任何输入,因此会将扫描器移至in.hasNextInt()之前的下一个单词,因此功能in.hasNextInt()将要求您输入一些内容,以便可以验证它是否为Int。

我们要做的是先检查当前扫描仪的输入是否有整数,然后再将其存储在age内或再次循环并请求新的输入。

一种更好的检查方法是执行以下操作。

import java.util.*;
class Main {
  public static void main(String[] args) {
    Scanner in = new Scanner(System.in);
    int age = 0;
    System.out.println("Enter your age: ");
    while(!in.hasNextInt()){// checks if scanner's next input is an int,return true if next input is not an Int and the while loop continues till the next input is an Int
      System.out.println("Please enter a valid age: ");
      in.nextLine();//move the scanner to receive the next nextLine
      //this is important so the hasNextInt() wont keep checking the same thing
    }
    //it will only exit the while loop when user have successfully enter an interger for the first word they inputted.
    age = in.nextInt();
    System.out.println("Your age is: " + age);
  }
}

输出:

Enter your age: 
boy
Please enter a valid age: 
boy girl
Please enter a valid age: 
5
Your age is: 5
,

您应将System.out.println("Enter your age: ");语句移至do-while循环之外。

,

嗨:D是因为!in.hasNextInt()的原因,它将导致您需要再次输入,但是您可以将其更改为其他条件,例如年龄大于特定值。

public class stackTest {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int age =0 ;
        boolean valid = false;
        do {
            System.out.println("Enter your age: ");
            age= in.nextInt();
            if(age>90) {
                System.out.println("Please enter a valid age");
                valid=true;
            }
            else valid=false;
        }while(valid);
        System.out.println("Age: " + age);
        
          
    }
}