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
相关产品推荐
相关产品推荐

