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

Java如何无需重复代码实现功能菜单跳转返回?

解决方案

核心通过外层循环包裹主菜单+功能逻辑方法抽取实现无重复代码返回主菜单,同时还优化了你代码中年龄计算的逻辑错误(原代码用了取模%,实际年龄应为当前年份减出生年份),额外补充了非法输入校验避免程序崩溃。

实现思路

  • 外层加无限循环包裹主菜单逻辑,每次功能结束后自动回到菜单选择环节
  • 将简易计算器、年龄计算器的执行逻辑分别封装为独立方法,避免代码冗余,后续修改功能只需调整对应方法即可
  • 功能内部的用户选择:选1继续执行当前功能,选2直接跳出当前功能的内层循环回到主菜单,选3直接终止程序

优化后完整代码

import java.util.Scanner;

public class CalculatorTest {
    // 统一Scanner全局复用,避免多次创建对象
    private static final Scanner mexam = new Scanner(System.in);

    public static void main(String[] args) {
        // 外层死循环包裹主菜单,实现返回逻辑
        while (true) {
            System.out.print("Enter 1 - Simple Calculator, Enter 2 - Age Calculator: ");
            int choice = mexam.nextInt();
            if (choice == 1) {
                runSimpleCalculator();
            } else if (choice == 2) {
                runAgeCalculator();
            } else {
                System.out.println("Invalid choice, please enter 1 or 2");
            }
        }
    }

    // 抽取简易计算器逻辑为独立方法
    private static void runSimpleCalculator() {
        int choice1;
        do {
            System.out.println("********************Simple Calculator********************");
            System.out.print("Enter first number: ");
            int firstNumber = mexam.nextInt();
            System.out.print("Enter second number: ");
            int secondNumber = mexam.nextInt();
            System.out.print("Enter operator: ");
            String operator = mexam.next();
            int result;
            switch (operator) {
                case "+":
                    result = firstNumber + secondNumber;
                    System.out.println("Sum: " + result);
                    break;
                case "-":
                    result = firstNumber - secondNumber;
                    System.out.println("Difference: " + result);
                    break;
                case "*":
                    result = firstNumber * secondNumber;
                    System.out.println("Product: " + result);
                    break;
                case "/":
                    // 补充除数为0的校验,避免程序崩溃
                    if (secondNumber == 0) {
                        System.out.println("Divisor cannot be 0");
                        break;
                    }
                    result = firstNumber / secondNumber;
                    System.out.println("Quotient: " + result);
                    break;
                default:
                    System.out.println("Invalid Operator");
            }
            System.out.println("*********************************************************");
            System.out.println("*********************************************************");
            System.out.print("Enter 1 - Continue, Enter 2 - Menu, Enter 3 - End: ");
            choice1 = mexam.nextInt();
            // 选3直接终止整个程序
            if (choice1 == 3) {
                System.exit(0);
            }
        // 只有选1才继续当前功能,选2直接跳出循环回到主菜单
        } while (choice1 == 1);
    }

    // 抽取年龄计算器逻辑为独立方法
    private static void runAgeCalculator() {
        int choice2;
        do {
            System.out.println("*********************Age Calculator**********************");
            int year = 2021, result1;
            System.out.print("Enter birth year: ");
            int birthyear = mexam.nextInt();
            // 修复原代码年龄计算错误,补充非法年份校验
            if (birthyear > year || birthyear <= 0) {
                System.out.println("Invalid birth year");
            } else {
                result1 = year - birthyear;
                System.out.println("Age: " + result1);
            }
            System.out.println("*********************************************************");
            System.out.println("*********************************************************");
            System.out.print("Enter 1 - Continue, Enter 2 - Menu, Enter 3 - End: ");
            choice2 = mexam.nextInt();
            if (choice2 == 3) {
                System.exit(0);
            }
        } while (choice2 == 1);
    }
}

内容的提问来源于stack exchange,提问作者Ban

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 23:45:03