You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 22:45:39