需要先将Scanner内的输入清楚,不然就重复读取了。简单调用Scanner 的next()方法就可以了
测试已通过
package zhidao;
import java.util.Scanner;
public class Retry {
private int myInt;
private Scanner myScanner = new Scanner(System.in);
public int getInt() {
try {
System.out.println("请输入法整数");
this.myInt = this.myScanner.nextInt();
} catch (Exception e) {
System.out.println("输入错误,请输入正确的数值!!!");
this.myScanner.next();
this.getInt();
}
return this.myInt;
}
public static void main(String[] args) {
Retry retry = new Retry();
System.out.println(retry.getInt());
}
}
不需要在catch中重新调这个方法,可以return -1,调方法处判断返回的值是否正确,不正确在重新调用方法即可!
public static void main(String[] args){
int i = getInt();
if(i==-1){
i = getInt();
}
System.out.println("您输入的数值是:"+i);
}
public static int getInt(){
int i = 0;
Scanner s = new Scanner(System.in);
try{
i = s.nextInt();
}catch(Exception e){
System.out.println("输入错误,请输入正确的数值");
return i=-1;
}
return i;
}
你在catch中可以调动getint()这个方法(但通常情况下没的你这么搞的。)。如果非要这样也行,为了不让死循环,只有在catch中处理掉异常保证下次调用方法时,不会发生异常才可以。
public int getInt() {
while(true)
try {
System.out.print("请输入法整数");
this.myScanner = new java.util.Scanner(System.in);// 重新初始化
this.myInt = this.myScanner.nextInt();
return this.myInt ;
}catch (Exception e) {
System.out.println("输入错误,请输入正确的数值!!!");
}
}
}
只是一个例子,请参考。还可以有别的情况的返回,例如输入3次错误等
你要的肯定不能实现,因为发生异常证明程序出错了,你还要让它重新跑,那不还是异常。所以不管你怎么处理都是死循环