scanner拋異常,遞迴死迴圈導致StackOverflowError問題
阿新 • • 發佈:2021-02-02
技術標籤:java
scanner拋異常,遞迴死迴圈導致StackOverflowError問題
問題原因:導致scanner丟擲的異常的資料沒有被處理,一直存在緩衝區,遞迴下去,異常一直被截獲,無限遞迴最終導致棧溢位。
public class Demo {
static Scanner input = new Scanner(System.in);
static int count=0;
public static void main(String[] args) {
int num = menu1();
System. out.println("輸入的是"+num);
}
public static int menu1(){
System.out.println("輸入0/1/2/3");
Scanner input1 = new Scanner(System.in);//1.input1改成input或改下面
int num = -1;
try{
num = input.nextInt();//1.input改成input1
if (num<0 || num> 3){
return menu1();
}
return num;
}catch (InputMismatchException e ){
System.out.println("異常時輸入的是");//2.括號里加input.next()接收資料
System.out.println("捕獲異常"+(++count));
return menu1();
}
}
}
解決方法:如上程式碼,在menu1方法裡再new一個物件或是在catch裡用next()接收下來這個資料。
參考:
https://blog.csdn.net/weixin_51870711/article/details/110309884?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.control