Eclipse中输入小数报错及条件控制语句问题咨询
问题原因与解决方法
报错根源
你遇到的是InputMismatchException,核心原因是系统区域设置(Locale)的小数点分隔符不匹配:Scanner.nextDouble()默认跟随系统Locale解析数字。如果你的系统Locale使用逗号(,)作为小数点分隔符(比如部分欧洲地区的系统),输入英文格式的点(.)就会被判定为非法格式,触发报错。
解决方案
有两种简单可行的处理方式:
方式1:适配系统输入格式
如果系统默认用逗号做小数点分隔符,输入时把.换成,即可,比如输入7,1而非7.1。
方式2:强制Scanner使用英文Locale解析
修改代码,给Scanner指定使用点作为小数点的Locale(比如Locale.US),这样输入.就能正常解析:
package controle; import java.util.Scanner; import java.util.Locale; // 新增导入 public class If { public static void main(String[] args) { // 给Scanner指定Locale.US,强制用点作为小数点分隔符 Scanner input = new Scanner(System.in).useLocale(Locale.US); System.out.print("Type the average: "); double average = input.nextDouble(); // 注意:if语句包含多行执行代码时,必须加花括号{},否则只有第一行属于if块 if(average >= 7.0) { System.out.println("approved"); System.out.println("Congratulations"); } input.close(); } }
额外提示
你的代码里还有一个新手常见问题:if语句未加花括号{}时,只有紧跟的第一行代码属于if的执行块。也就是说不管平均分是否≥7,System.out.println("Congratulations");都会执行。如果要让这两行都在条件满足时执行,一定要加上花括号,就像上面修改后的代码那样。
内容的提问来源于stack exchange,提问作者Fillypper
相关产品推荐
相关产品推荐

