如何使用try-catch验证用户的输入,并在输入失效时再次读入输入?

时间:2016-03-05 02:17:31

标签: java validation input exception-handling

我想使用异常处理机制验证用户输入。

例如,让我们说我要求用户输入整数输入并输入一个字符。在这种情况下,我想告诉他们他们输入了错误的输入,除此之外,我希望他们提示他们再次读取整数,并继续这样做直到他们输入可接受的输入。

我看过一些类似的问题,但他们没有再次接受用户的输入,只是打印出输入不正确的信息。

使用do-while,我会做这样的事情:

Scanner reader = new Scanner(System.in);  
System.out.println("Please enter an integer: ");
int i = 0;
do {
  i = reader.nextInt();
} while (  ((Object) i).getClass().getName() != Integer  ) {
  System.out.println("You did not enter an int. Please enter an integer: ");
}
System.out.println("Input of type int: " + i);

问题:

  1. 在检查InputMismatchException条件的语句到达之前,将在第5行引发while

  2. 我确实想学习使用异常处理习语进行输入验证。

  3. 因此,当用户输入错误输入时,我如何(1)告诉他们输入错误并且(2)再次读入他们的输入(并继续这样做直到他们输入正确的输入),使用try-catch机制?

    编辑:@Italhouarne

    import java.util.InputMismatchException;
    import java.util.Scanner;
    
    
    public class WhyThisInfiniteLoop {
    
        public static void main (String [] args) {
            Scanner reader = new Scanner(System.in); 
            int i = 0; 
            System.out.println("Please enter an integer: ");
    
            while(true){
              try{
                 i = reader.nextInt();
                 break;  
              }catch(InputMismatchException ex){
                 System.out.println("You did not enter an int. Please enter an integer:");
              }
            }
    
            System.out.println("Input of type int: " + i);
        }
    
    }
    

3 个答案:

答案 0 :(得分:1)

你走了:

Scanner sc = new Scanner(System.in);
boolean validInput = false;
int value;
do{
    System.out.println("Please enter an integer");
    try{
        value = Integer.parseInt(sc.nextLine());
        validInput = true;
    }catch(IllegalArgumentException e){
        System.out.println("Invalid value");
    }
}while(!validInput);

答案 1 :(得分:1)

您可以尝试以下操作:

Scanner reader = new Scanner(System.in);  
System.out.println("Please enter an integer: ");
int i = 0;

while(true){
  try{
     i = reader.nextInt();
     break;  
  }catch(InputMismatchException ex){
     System.out.println("You did not enter an int. Please enter an integer:");
  }
}

System.out.println("Input of type int: " + i);

答案 2 :(得分:1)

在Java中,最好只将try / catch用于“特殊”环境。我会使用Scanner类来检测是否输入了int或其他一些无效字符。

import java.util.Scanner;

public class Test {

    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        boolean gotInt = false;

        while (!gotInt) {
            System.out.print("Enter int: ");
            if (scan.hasNextInt()){
                gotInt = true;
            }
            else {
                scan.next(); //clear current input
                System.out.println("Not an integer");
            }
        }
        int theInt = scan.nextInt();
    }
}