含if判断的for循环后出现Unreachable Statement不可达语句报错排查
Java JOptionPane报不可达语句错误排查
我有一个非常基础的作业,但对我而言仍是全新的领域。程序要求询问用户输入姓名、姓氏、年级和科目:如果输入的科目不是IT,就忽略该条输入;如果输入的科目是IT,后续会复用用户的姓名、姓氏和年级信息,按要求格式展示随输入内容动态变化的消息。
我遇到的问题是:我编写的代码逻辑正确,但末尾使用JOptionPane展示消息的代码行报错Unreachable Statement(不可达语句)。十分奇怪的是,这段代码和作业的参考答案几乎完全一致,却仍出现报错。我猜测可能是Netbeans的识别问题,我在家重写的代码可以正常运行,代码如下:
String name, surname, subject, message = "IT Learners:\n\n"; int grade, counter = 0; for (int i = 0; i < 3; i++) { name = JOptionPane.showInputDialog("Enter Your Name Here: "); surname = JOptionPane.showInputDialog("Enter Your Surname Here: "); subject = JOptionPane.showInputDialog("Enter Your Subject Here: "); grade = Integer.parseInt(JOptionPane.showInputDialog("Enter Your " + "Grade Here: ")); if (subject.equalsIgnoreCase("IT")) { message += name + " " + surname + " is in grade " + grade + ".\n"; counter++; } } JOptionPane.showMessageDialog(null, message + "There is a total of " + counter + " IT Learners.");
下方是我在学校上课时编写的代码,我个人看不出两处代码的区别,因此想咨询这段代码是否正确,或是我漏看了什么不易察觉的小错误?
我在学校编写的代码:
String name, surname, subject, message = "IT Learners:\n\n"; int grade, counter = 0; for (int i = 0; i < 3; i++) { name = JOptionPane.showInputDialog("Enter Your Name Here: "); surname = JOptionPane.showInputDialog("Enter Your Surname Here: "); subject = JOptionPane.showInputDialog("Enter Your Subject Here: "); grade = Integer.parseInt(JOptionPane.showInputDialog ("Enter Your Grade Here: ")); if (subject.equalsIgnoreCase("IT")) { message += name + " " + surname + " is in grade " + grade + ".\n"; counter++; } } JOptionPane.showMessageDialog(null, message + "There is a total of " + counter + " IT Learners.");
两份代码看起来完全一致,请问该报错是Netbeans自身识别混乱导致的,还是我确实漏看了什么细节?
完整代码如下:
import javax.swing.JOptionPane; /** * * @author (My Name) */ public class ITLearners { public static void main(String[] args) { // TODO code application logic here String name, surname, subject, message = "IT Learners:\n\n"; int grade, counter = 0; for (int i = 0; i < 3; i++) { name = JOptionPane.showInputDialog("Enter Your Name Here: "); surname = JOptionPane.showInputDialog("Enter Your Surname Here: "); subject = JOptionPane.showInputDialog("Enter Your Subject Here: "); grade = Integer.parseInt(JOptionPane.showInputDialog("Enter Your " + "Grade Here: ")); if (subject.equalsIgnoreCase("IT")) { message += name + " " + surname + " " + " is in grade " + grade + ".\n"; counter++; } } JOptionPane.showMessageDialog(null, message + "There is a total of " + counter + " IT Learners."); } }
问题原因及解决方案
你贴出的所有代码本身语法、逻辑完全正确,不存在会触发不可达语句报错的问题,该报错可按以下优先级排查:
- 优先考虑是NetBeans IDE缓存异常导致:点击顶部菜单栏
文件-> 选择清理并构建项目,等待构建完成后重新运行代码即可解决绝大多数缓存类异常 - 如果清理项目缓存后问题仍存在,删除NetBeans全局缓存:关闭NetBeans,找到对应系统的缓存目录(Windows一般为
C:\Users\你的用户名\.netbeans\版本号\var\cache,macOS为~/Library/Caches/NetBeans/版本号),删除整个cache目录后重启IDE即可 - 额外校验:确认学校版本的实际代码中,for循环体末尾没有误加
return、System.exit()这类会提前终止main方法执行的语句,你贴出的代码里没有这类逻辑,但如果实际编写时不小心添加了,就会导致后续JOptionPane代码永远无法执行,触发不可达语句报错
内容的提问来源于stack exchange,提问作者RandomCoder
相关产品推荐
相关产品推荐

