1. 程式人生 > 其它 >scanner拋異常,遞迴死迴圈導致StackOverflowError問題

scanner拋異常,遞迴死迴圈導致StackOverflowError問題

技術標籤: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()接收下來這個資料。

至於方法內scanner和外面static scanner物件引用指向及具體導致棧溢位過程,再研究下。
參考:
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