Java如何实现仅打印while循环执行后的最后一个值
问题原因
当前代码将打印语句System.out.println(PizzaQty);写在while循环的执行块内,每轮循环不论是否找到符合要求的披萨数量,都会触发打印,因此会输出循环过程中产生的所有中间值。
同时原代码存在计数逻辑偏差:当找到满足整除条件的PizzaQty后,代码仍会无条件执行++PizzaQty自增操作,若直接将打印语句移到循环外,会得到比正确结果大1的错误值。
修复方法
调整代码逻辑,仅在找到满足「总披萨片数可以被人数整除」条件的最终值时执行打印,同时修正自增逻辑的位置,避免计数偏差。修正后的完整代码如下:
public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int PeopleQty = scanner.nextInt(); int PiecesQty = scanner.nextInt(); int PizzaQty = 1; boolean divisibleByPieces = false; while (!divisibleByPieces) { if ((PiecesQty * PizzaQty) % PeopleQty == 0) { divisibleByPieces = true; // 仅在得到最终正确结果时打印 System.out.println(PizzaQty); } else { // 不满足条件时才自增,进入下一轮判断 ++PizzaQty; } } }
改动说明
- 删除了循环内每轮都会执行的无差别打印逻辑,避免输出中间计算值
- 将
++PizzaQty自增逻辑移动到不满足条件的else分支中,避免找到正确值后仍执行自增导致结果错误 - 打印操作仅在判断到符合整除条件的分支内执行,输出的就是最终需要的最小披萨数量
内容的提问来源于stack exchange,提问作者Roman Maslov
相关产品推荐
相关产品推荐

