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

Java编写控制台计算器报StringIndexOutOfBoundsException索引0错误如何解决

问题根因

你遇到的java.lang.StringIndexOutOfBoundsException: String index out of range: 0异常,是因为调用charAt(0)时目标字符串为空,和你提到的choice1变量是否为空无关,问题出在Scanner类的输入读取逻辑上:

  • Scanner的nextInt()方法只会读取输入中的数字部分,用户输入数字后按下的回车换行符\n会残留在输入缓冲区中
  • 当代码执行到询问是否继续的sc.nextLine()时,会直接读取缓冲区中残留的空换行,得到长度为0的空字符串,此时调用charAt(0)就会触发下标越界异常

修复方案

最简单的修改方式是在进入是否继续的判断循环前,先调用一次sc.nextLine()清空缓冲区残留的换行符,同时可以加一层空输入判断避免用户误触回车再次报错,修改后的代码片段如下:

// 原有代码:default分支结束后
choice1 = ' ';
// 新增:清空之前nextInt()残留的换行符
sc.nextLine();

while(choice1 != 'y' && choice1 != 'n')
{
    System.out.print("\nTry again ?\n");
    System.out.print("y | n\n");
    String input = sc.nextLine().trim();
    // 跳过空输入
    if (input.length() == 0) {
        continue;
    }
    choice1 = input.charAt(0);
};

如果想更彻底的避免这类问题,也可以统一用nextLine()读取输入,再手动转成对应类型的数值,从根源上避免残留换行的问题。

内容的提问来源于stack exchange,提问作者MrTekkel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 22:45:05