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

