有时候在抛出一个异常时,只是希望程序重复执行某些代码,以便用户尝试二次输入……当你尝试把要执行的程序包装在一个方法里时,但出现异常时。运行你的方法。这时粗略的说是可以的……这还存在缺陷:就是当用户二次输入又出现同样的异常时,程序就会出现“异常”。也是相通的异常,只不过你没有捕捉到而已……
看下面例子:
import java.util.InputMismatchException;
import java.util.Scanner;
public class AA {
Scanner input=new Scanner(System.in);
public AA() throws InputMismatchException{
System.out.println("请选择数字:/n1……/n2……/n3……");
int choice=input.nextInt();
switch(choice){
case 1:
System.out.println("1233");
break;
case 2:
System.out.println("234");
break;
case 3:
System.out.print("12455");
break;
default:
System.out.println("有误");
}
}
public static void main(String args[]){
boolean doen=false;
while(!doen){
try{
new AA();
doen=true;
}catch(InputMismatchException e){
System.out.println("对不起,你输入的数据有误!请核对后重新输入:");
}
}
}
}
我的解释:
当while中条件是true时,执行new AA()
当没有出现异常时程序执行new AA()并且true将doen覆盖掉,此时while的条件变为false就不满足原来的条件了……
故,也就不会再循环执行了!
当出现异常时从new AA()中跳出,doen=true并没有执行,原来while中的条件并没有改变,仍为true,就会达到出现异常时
循环处理的效果了。
————————————————————————————————————————————————————————
这时朋友问我的问题,我解释过了,好像没大理解。去论坛问了下网友的思路。看看他们的思路你能不能理解:
@1@
new AA();如果发生异常,则跳过doen=ture;
然后判断是否满足循环条件,!doen为true,满足循环条件,继续循环
如果new AA();不发生异常,执行doen=ture;
然后判断是否满足循环条件,!doen为false,不满足循环条件,终止循环
当new AA()没有出现异常时doen=true,则不满足while条件,退出循环。如果出现异常,执行System.out.println("对不起,你输入的数据有误!请核对后重新输入:"); doen还是等于false,所以继续循环。从这里看while语句是为了确保用户输入的是正确的值。
——-------------------------------------------------————————————————————————————————————---