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

Java温度转换器抛出StringIndexOutOfBoundsException异常求助

解决温度转换器的StringIndexOutOfBoundsException异常

嘿,我来帮你搞定这个异常问题~你遇到的StringIndexOutOfBoundsException是因为输入缓冲区残留了换行符导致的,这是Java新手常踩的输入坑,别担心,很容易解决!

问题原因

在程序前半部分,你应该用了sc.nextInt()或者sc.nextDouble()这类方法读取温度数值——这类方法只会读取数字本身,不会处理你输入数字后按下的回车(也就是换行符\n)。当后续调用sc.nextLine()时,它会直接读取这个残留的换行符,得到一个空字符串,这时候调用charAt(0)自然就会报错,因为空字符串根本没有第0个字符。

两种解决方法

方法一:清空输入缓冲区的残留换行符

在你读取完温度数值的代码后面,额外加一行sc.nextLine()来吃掉残留的换行符。比如:

// 假设你之前读取温度的代码是这样的
double temp = sc.nextDouble();
sc.nextLine(); // 新增这行,清空缓冲区里的换行符

方法二:改用sc.next()读取Y/N输入

sc.next()会自动跳过前面的所有空白字符(包括换行符),直接读取到有效输入内容,这样就不会出现空字符串的问题。同时注意把你原来的位运算符&改成逻辑与&&,语义更准确:

do {
    do {
        // New conversion?
        System.out.println();
        System.out.println("Would you like to make another conversion ? (Y/N)");
        response = sc.next().charAt(0);
    } while (response != 'Y' && response != 'N'); // 用&&替代&
} while (response == 'Y');

小提醒

刚学Java输入的时候,一定要区分next()和nextLine()的差异:

  • next():跳过空白字符,读取到下一个空白(空格、换行、制表符等)前的内容
  • nextLine():读取整行内容,包括换行符之前的所有字符,甚至是空行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:11:03