我想使用异常处理机制验证用户输入。
例如,让我们说我要求用户输入整数输入并输入一个字符。在这种情况下,我想告诉他们他们输入了错误的输入,除此之外,我希望他们提示他们再次读取整数,并继续这样做直到他们输入可接受的输入。
我看过一些类似的问题,但他们没有再次接受用户的输入,只是打印出输入不正确的信息。
使用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);
问题:
在检查InputMismatchException
条件的语句到达之前,将在第5行引发while
。
我确实想学习使用异常处理习语进行输入验证。
因此,当用户输入错误输入时,我如何(1)告诉他们输入错误并且(2)再次读入他们的输入(并继续这样做直到他们输入正确的输入),使用try-catch机制?
编辑:@Italhouarneimport 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);
}
}
答案 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();
}
}