You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中mainMenu输入非整数引发StackOverflowError问题求助

解决Scanner输入非整数导致StackOverflowError的问题

嘿,我知道你为啥遇到这个StackOverflowError了!问题出在Scanner的输入缓冲区没有被清空上:当你输入非整数触发InputMismatchException后,那个错误的输入(比如你输入的字符串)还留在Scanner的缓冲区里,并没有被消费掉。所以每次你递归调用mainMenu()时,s.nextInt()都会立刻读取到同一个错误输入,再次触发异常,无限递归下去,最终把调用栈撑爆,就出现了StackOverflowError。

修复方案

在catch块里,添加一行s.nextLine()来清空缓冲区里的错误输入(包括换行符),这样下一次调用nextInt()时就能等待用户的新输入了。修改后的mainMenu()方法如下:

public static void mainMenu() {
    System.out.println("Please select an item below:");
    System.out.println("(0) Login");
    System.out.println("(1) Create Account");
    System.out.print(">> ");
    try {
        int mainMenu = s.nextInt();
        if (mainMenu == 0) {
            login();
        } else if (mainMenu == 1) {
            System.out.println("coo create acc"); //add in account creation
        }
    } catch(InputMismatchException e) {
        System.out.println("\nPlease enter an integer");
        // 清空缓冲区里的错误输入,避免重复读取
        s.nextLine();
        // 重新调用菜单
        mainMenu();
    }
}

更稳妥的替代方案:用循环代替递归

递归调用虽然简单,但如果用户多次输入错误,还是有栈溢出的潜在风险。换成while循环来实现重复提示会更安全,示例代码如下:

public static void mainMenu() {
    boolean validInput = false;
    while (!validInput) {
        System.out.println("Please select an item below:");
        System.out.println("(0) Login");
        System.out.println("(1) Create Account");
        System.out.print(">> ");
        try {
            int mainMenu = s.nextInt();
            validInput = true; // 输入有效,退出循环
            if (mainMenu == 0) {
                login();
            } else if (mainMenu == 1) {
                System.out.println("coo create acc"); //add in account creation
            }
        } catch(InputMismatchException e) {
            System.out.println("\nPlease enter an integer");
            s.nextLine(); // 清空错误输入
        }
    }
}

这样不管用户输入多少次错误,都不会出现栈溢出的问题啦!

内容的提问来源于stack exchange,提问作者John Antonio Anselmo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:24:59