如何解决Java中Do-While循环退出时App方法多执行一次的问题?
问题分析
你的问题出在do-while循环的执行逻辑上:do块里的代码会无条件先执行一次,再去判断while的条件。当前代码里,你输入Y之后,循环体里的App()还是会被调用,才会退出循环,这就是多余执行的原因。
修复方案
可以把App()的调用逻辑调整,确保用户选择退出时直接终止,不再执行App。
方案1:调整do-while的执行顺序
把App()放在循环开始前先执行一次,然后在循环里先询问退出,只有用户不选择退出时才执行App:
public static void main(String[] args) { Scanner sc2 = new Scanner(System.in); App(); // 第一次执行 String answer; do { System.out.println("Do you want to exit (Y/N)?"); answer = sc2.next(); // 仅当用户不选择退出时,才执行App if (!answer.equalsIgnoreCase("Y")) { App(); } } while (!answer.equalsIgnoreCase("Y")); }
方案2:改用while循环(逻辑更直观)
先执行App,再询问是否退出,循环条件直接判断用户是否选择退出:
public static void main(String[] args) { Scanner sc2 = new Scanner(System.in); String answer = "N"; // 初始值设为N,确保第一次执行App while (!answer.equalsIgnoreCase("Y")) { App(); System.out.println("Do you want to exit (Y/N)?"); answer = sc2.next(); } }
额外优化:复用Scanner
你的代码每次调用App()都会新建Scanner,容易导致资源浪费和输入异常,建议复用同一个Scanner:
public static void App(Scanner sc){ System.out.print("Write a number: "); int num1 = sc.nextInt(); System.out.print("Write another number: "); int num2 = sc.nextInt(); System.out.println("Result: "+(num1+num2)); } public static void main(String[] args) { Scanner sc = new Scanner(System.in); String answer = "N"; while (!answer.equalsIgnoreCase("Y")) { App(sc); System.out.println("Do you want to exit (Y/N)?"); answer = sc.next(); } sc.close(); // 用完关闭资源 }
内容的提问来源于stack exchange,提问作者Diret
相关产品推荐
相关产品推荐

