我正在开发一个Serpinski三角形程序,要求用户绘制三角形的水平。为了保护我的节目,我把它放在:
Scanner input= new Scanner(System.in);
System.out.println(msg);
try {
level= input.nextInt();
} catch (Exception e) {
System.out.print(warning);
//restart main method
}
如果用户用字母或符号打孔,是否有可能在捕获到异常后重启main方法?
答案 0 :(得分:8)
您可以使用hasNextInt()
阻止Scanner
投掷InputMismatchException
:
if (input.hasNextInt()) {
level = input.nextInt();
...
}
这是一个经常被遗忘的事实:您始终可以通过首先确保Scanner
来阻止 InputMismatchException
在nextXXX()
上投掷hasNextXXX()
。< / p>
但回答你的问题,是的,你可以像其他方法一样调用main(String[])
。
注意:要在循环中使用hasNextXXX()
,您必须跳过导致其返回false
的“垃圾”输入。您可以通过调用和放弃nextLine()
来执行此操作。
Scanner sc = new Scanner(System.in);
while (!sc.hasNextInt()) {
System.out.println("int, please!");
sc.nextLine(); // discard!
}
int i = sc.nextInt(); // guaranteed not to throw InputMismatchException
答案 1 :(得分:3)
好吧,你可以递归地调用它:main(args)
,但你最好使用while
循环。
答案 2 :(得分:0)
你最好想要这样做:
boolean loop = true;
Scanner input= new Scanner(System.in);
System.out.println(msg);
do{
try {
level= input.nextInt();
loop = false;
} catch (Exception e) {
System.out.print(warning);
//restart main method
loop = true;
}
while(loop);