VS Code运行Java代码报main线程InputMismatchException异常求助
异常根因
你遇到的java.util.InputMismatchException既不是VS Code配置问题,也不是int变量类型的问题,异常触发的直接原因是:你调用Scanner.nextInt()方法时,控制台输入的内容不是整数格式(比如输入了字母、汉字、标点符号,或者带小数的数值),和方法预期接收的整数类型不匹配。
除此之外你的代码还存在多处逻辑错误,会导致运行结果不符合需求甚至死循环:
- 外层for循环条件写错:
for(i = 1; 1 <= 5; i++)中的判断条件是1<=5,恒成立,会进入死循环无限执行 - 内层统计员工工时的循环条件错误:
for(h = 1; h < empleados; h++)会漏掉最后一个员工的工时统计,应该改为h <= empleados - 变量
nempleado全程没有赋值逻辑,最后打印时永远输出0,需要在更新最大工时的时候同步记录当前员工编号h - 最终结果的打印语句放在了外层循环内部,每跑完一天就会打印一次,应该移到外层循环外面,跑完5天再统一输出
修复后可正常运行的代码
import java.util.*; public class App { public static void main(String[] args) throws Exception { Scanner leer = new Scanner (System.in); int i, empleados, h, e1=0, mhora=0, hrs, nempleado=0, dia = 0, dia5 = 0; // 修复外层循环条件 for(i = 1; i <= 5; i++) { System.out.println("Pon el numero de empleados por dia" + i); empleados = leer.nextInt(); if(i == 1) { e1 = empleados; } // 修复内层循环条件 for(h = 1; h <= empleados; h++) { System.out.println("Pon el numero de horas del empleado " + h); hrs = leer.nextInt(); if (hrs > mhora) { mhora = hrs; nempleado = h; // 同步记录当前员工编号 dia = i; } if (i == 5){ dia5 = dia5 + hrs; } } } // 打印逻辑移到循环外 System.out.println("La cantidad de empleados que trabajo el día 1 es de "+e1); System.out.println("El empleado que trabajo más horas fue el "+nempleado+" trabajo "+mhora+" y fue en el día "+dia); System.out.println("El total de horas rabajadas en el día 5 fue de "+ dia5); leer.close(); } }
运行注意事项
- 代码运行后请严格按照控制台提示输入整数,不要输入非整数内容即可避免
InputMismatchException异常 - 输入的员工数量、工时都请输入正整数
内容的提问来源于stack exchange,提问作者Vicente T Lopez G
相关产品推荐
相关产品推荐

