Java 8 While循环优化:如何将break语句缩减至至多1个?
改写方案
要满足循环中break/continue至多1个的要求,可以通过调整循环条件替代原有的while(true)和多个break语句,同时完全保留原逻辑。
改写思路
原循环的核心逻辑是:只要队首元素未达到最低甜度要求,且队列中至少有2个元素,就持续合并最小的两个元素。我们可以直接把这两个条件作为循环的终止判断,让循环自动结束,无需使用break。循环结束后再根据最终状态判断是否可行。
改写后代码
// 初始化结果标记和操作数 boolean solutionPossible = false; int operations = 0; // 仅在需要合并时执行循环:队首不够甜 且 队列至少有2个元素 while (queue.size() >= 2 && queue.peek() < minSweetness) { // 取出最小的两个元素 int a1 = queue.poll(); int a2 = queue.poll(); // 合并后重新入队 queue.offer(a1 + 2 * a2); // 统计操作次数 operations++; } // 循环结束后判断最终结果 if (queue.peek() >= minSweetness) { solutionPossible = true; } else { // 只剩单个元素且未达标 solutionPossible = false; }
逻辑一致性说明
- 原代码中两种break的场景:
- 队首达标→标记成功并终止:改写后通过循环结束后的判断实现。
- 队列只剩1个元素且未达标→标记失败并终止:改写后通过循环条件不满足自动退出,再进入else分支标记失败。
- 合并操作、操作数计数的逻辑完全和原代码一致,没有功能变化。
内容的提问来源于stack exchange,提问作者Moses O
相关产品推荐
相关产品推荐

