Java增强for循环if-else逻辑同时输出匹配结果与未知词问题
问题根因
现有代码的异常输出完全是遍历逻辑写错导致的,具体问题点:
- 输出
Unknown word的逻辑被放在了for循环的else分支中:遍历词表时每碰到一个和输入不匹配的词条,就会打印一次Unknown word。假设词表存了20个词条,输入的词刚好是第5个,那前4个不匹配的词条都会触发一次Unknown word输出;如果输入的词完全不在词表中,就会连续打印20次Unknown word。 - 没有做匹配状态标记,也没有在匹配到目标词条时提前终止遍历。甚至输入
quit时也会先完整跑完整个词表的遍历,才会走到退出判断,所以输quit的时候也会蹦出一堆多余的Unknown word。 - 错误输出里出现的
Uknown word是单词拼写漏了字母n,属于手误,修正拼写即可。
修复方案
按照需求调整遍历逻辑即可,核心改动点:
- 每次拿到用户输入后,先判断是不是
quit,如果是直接跳出循环,不走词表匹配流程 - 遍历词表前先定义布尔值标记
found,初始值为false,用来记录是否命中词条 - 遍历过程中如果匹配到目标词条,就输出对应翻译,把
found设为true,直接break终止遍历节省性能 - 等整个词表遍历完成后,再判断
found的值:如果为false,说明没有匹配项,只打印一次Unknown word即可
修复后可直接替换的代码片段
String eng; do { System.out.print("Enter English word: "); eng = s.nextLine(); // 命中退出指令直接跳出循环,不做词表匹配 if (eng.equalsIgnoreCase("quit")) { break; } boolean found = false; for (WordPair wordObject : words) { if (wordObject.getEnglishWord().equals(eng)) { System.out.println(wordObject.getFinnishWord()); System.out.println(); found = true; break; } } // 遍历完所有词条仍未匹配才输出一次提示 if (!found) { System.out.println("Unknown word"); System.out.println(); } } while (true); System.out.println("Bye!");
改完后运行输出会完全匹配预期效果,不会再出现多余的Unknown word打印。
内容的提问来源于stack exchange,提问作者Enerqia
相关产品推荐
相关产品推荐

