Java代码抛出InputMismatchException异常,请求排查修复
问题原因及修复方案
核心问题
你遇到的InputMismatchException是因为程序读取第一个成绩时,拿到的不是数字而是字符串。从运行日志能看到,输入名字mohammed后,你输入了Enter这个字符串,而程序期望读取的是double类型的成绩,直接触发了类型不匹配的错误。
导致这种输入误解的根源是提示代码的写法问题:
System.out.print("Enter grade1: grade2: grade3: ");
这行代码会一次性输出三行提示,用户无法直观判断需要依次输入成绩,反而可能误解要输入Enter来继续,最终让后续的scan.nextDouble()读取到非数字内容。
修复步骤
- 拆分提示语句,逐个引导输入
把批量提示拆成单独的输出,每次读取成绩前明确给出对应提示,让用户清楚当前该输入什么:
import java.util.Scanner; public class Main{ public static void main(String args[]){ Scanner scan = new Scanner(System.in); System.out.print("Enter student name: "); String name = scan.next(); // 逐个输出成绩提示,明确引导输入 System.out.print("Enter grade1: "); double grade1 = scan.nextDouble(); System.out.print("Enter grade2: "); double grade2 = scan.nextDouble(); System.out.print("Enter grade3: "); double grade3 = scan.nextDouble(); double average = ((grade1 * 0.25) + (grade2 * 0.25) + (grade3 * 0.50)); System.out.println(name + ", Your average is " + average); } }
- 可选优化:支持带空格的姓名
原代码用scan.next()读取姓名,只能获取空格前的内容(比如输入mohammed ali,只会拿到mohammed)。如果要支持全名,可以改成scan.nextLine(),但需要先处理next()留下的换行符:
System.out.print("Enter student name: "); scan.nextLine(); // 清除之前输入留下的换行符 String name = scan.nextLine();
修复后运行示例
调整后运行,输入流程会变成:
java -cp /tmp/NmkWULoGu6 Main Enter student name: mohammed Enter grade1: 2 Enter grade2: 5 Enter grade3: 4 mohammed, Your average is 4.0
此时不会再出现输入不匹配的错误。
内容的提问来源于stack exchange,提问作者Braumasta
相关产品推荐
相关产品推荐

