import java.util.Scanner;
/**
* @author 你好世界~~~
* @Description
* @date 2021/9/17 21:25
*/
public class Test {
Scanner sc = new Scanner(System.in);
int choiceOfPeople;
public int getChoice() {
//输入的数据可能有误(可能为字母,小数。。。)
try {
choiceOfPeople = sc.nextInt();
} catch (Exception e) {
System.out.println("您输入有误,请重新输入~");
return getChoice();
}
return choiceOfPeople;
}
public static void main(String[] args) {
System.out.println(new Test().getChoice());
}
}
?以上代码,在实际运行时就报错:Exception in thread "main" java.lang.StackOverflowError
追其原因还是在sc.nextInt()这,nextInt方法在发生异常后,不再接受用户输入的任何数据,而是徘徊在异常区域,如果外部使用死循环,就会导致死循环的发生。
解决方法:重新实例化Scanner对象 用new Scanner(System.in)代替上述代码中的sc即可。
import java.util.Scanner;
/**
* @author 你好世界~~~
* @Description
* @date 2021/9/17 21:25
*/
public class Test {
int choiceOfPeople;
public int getChoice() {
//输入的数据可能有误(可能为字母,小数。。。)
try {
choiceOfPeople = new Scanner(System.in).nextInt();
} catch (Exception e) {
System.out.println("您输入有误,请重新输入~");
return getChoice();
}
return choiceOfPeople;
}
public static void main(String[] args) {
System.out.println(new Test().getChoice());
}
}
|