62,620
社区成员
发帖
与我相关
我的任务
分享
int intValue = sc.nextInt();
String line = sc.nextLine();
你在控制台输入“12”后按下回车,intValue的值为12,line的值是空的,连换行符也没有。
再回到你的问题,因为nextInt()读取的时候,它发现输入并不是int值,所以它并没有把你的输入消耗掉。等到异常处理后,再次进入循环体,sc里面还是有内容,所以sc并不会阻塞,等待控制台输入。所以你需要在异常处理块里面将你输入的错误内容丢弃掉(消耗掉),即调用nextLine()方法。再次进入循环体里面的时候,由于sc里面没有内容,它便会阻塞,等待控制台输入。