【发布时间】:2014-03-16 17:55:36
【问题描述】:
我有一个写的方法。此方法仅扫描用户输入的整数输入。如果用户输入一个字符值,它将抛出一个输入不匹配异常,这在我的 Try-Catch 语句中处理。问题是,如果用户输入任何不是数字的内容,然后引发异常,我需要该方法循环返回以再次要求用户输入。据我了解,如果捕获到错误,Try catch 语句会自动循环回 Try 块。这不正确吗?请指教。
这是我的方法(很简单):
public static int getMask() {
//Prompt user to enter integer mask
Scanner keyboard = new Scanner(System.in);
int output = 0;
try{
System.out.print("Enter the encryption mask: ");
output = keyboard.nextInt();
}
catch(Exception e){
System.out.println("Please enter a number, mask must be numeric");
}
return output;
}//end of getMask method
以下是该方法在我的程序中的实现方式:
//get integer mask from user input
int mask = getMask();
System.out.println("TEMP mask Value is: " + mask);
/************ *************** ********/ 这是我更新的代码。它创建了一个我无法逃脱的无限循环。我不明白为什么我要为此苦苦挣扎。请帮忙。
public static int getMask() {
//Prompt user to enter integer mask
Scanner keyboard = new Scanner(System.in);
int output = 0;
boolean validInput = true;
do{
try {
System.out.print("Enter the encryption mask: ");
output = keyboard.nextInt();
validInput = true;
}
catch(InputMismatchException e){
System.out.println("Please enter a number, mask must be numeric");
validInput = false;
}
}while(!(validInput));
return output;
/************ ********/FINAL_ANSWER 我终于能够得到它。我想我只需要更多地研究布尔逻辑。有时它让我头晕目眩。使用整数测试实现循环效果很好。我想是我自己的用户错误。这是我的最终代码在更好的异常处理下正常工作。如果您有任何批评意见,请在 cmets 中告诉我。
//get integer mask from user input
int repeat = 1;
int mask = 0;
do{
try{
mask = getMask();
repeat = 1;
}
catch(InputMismatchException e){
repeat = 0;
}
}while(repeat==0);
【问题讨论】:
-
The try block。不,它不会循环返回。
-
谢谢我已经读过了,但我显然缺少一个核心概念
-
那么我需要一个 do-while 循环。嗯,这是有道理的。我只是对 try-catch 块的工作方式感到困惑。谢谢。