Java do-while循环读取时间抛出DateTimeParseException异常如何解决
问题根因
- Scanner输入残留:
sc.nextInt()只会读取输入的整数值,不会处理整数末尾的换行符。第二次进入do-while循环时,第一个sc.nextLine()会直接读取到上一轮残留的换行符,返回空字符串,导致LocalTime.parse()解析空串抛出异常。 - 循环条件错误:
while(choice=true)是赋值操作,会永久将choice置为true,循环永远无法正常退出,此处应为相等判断逻辑。
修复方案
- 调用
sc.nextInt()后新增一行sc.nextLine(),消费残留的换行符:
System.out.println("Press '1' to enter another event"); int ch= sc.nextInt(); sc.nextLine(); // 新增该行,清除输入缓冲区的换行符 if(ch != 1) choice = false;
- 修正循环条件,将赋值改为判断:
// 原写法 while(choice=true); // 修改后 while(choice);
- 可选优化:给时间解析逻辑加异常捕获,当用户输入格式不符合要求时提示重新输入,避免单次输入错误直接终止程序。
内容的提问来源于stack exchange,提问作者Ali Raza
相关产品推荐
相关产品推荐

