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

Java使用switch case实现计算器如何限制非法运算符输入?

解决方案

核心逻辑是在运算符输入阶段增加合法性校验,通过循环强制用户仅能输入指定合法运算符后,才进入后续数字输入流程,避免无效输入触发后续无意义操作。
另外你的原有代码存在输出逻辑错误:所有计算结果输出语句中,第二个操作数错误写为num1,需要统一修正为num2。

具体修改步骤

  • 新增do-while循环包裹运算符输入逻辑,首次默认触发输入提示,输入后自动校验合法性
  • 用"+-*/%".contains(String.valueOf(operator))判断输入的运算符是否属于合法范围,不合法则提示重新输入
  • 修复输出语句的操作数错误

修改后完整代码

package calculator;

import java.util.*;
public class Calculator {

    public static void main(String[] args) {
        
        char operator;
        Double num1, num2, result;
        
        Scanner input = new Scanner(System.in);
        
        // 运算符输入加校验循环
        do {
            System.out.println("Enter the operator: +,-,*,/,% ");
            operator = input.next().charAt(0);
            // 校验不合法则提示
            if(!"+-*/%".contains(String.valueOf(operator))){
                System.out.println("Invalid operator, please try again.");
            }
        } while (!"+-*/%".contains(String.valueOf(operator)));
        
        // 运算符合法后才进入数字输入环节
        System.out.println("Enter the First Number:");
        num1 = input.nextDouble();
        
        System.out.println("Enter the Second Number:");
        num2 = input.nextDouble();

        switch (operator) {
            case '+': 
                result = num1+num2;
                System.out.println(num1+" + "+num2+" = " + result);
                break;
            case '-': 
                result = num1-num2;
                System.out.println(num1+" - "+num2+" = " + result);
                break;
            case '*': 
                result = num1*num2;
                System.out.println(num1+" * "+num2+" = " + result);
                break;
            case '/': 
                result = num1/num2;
                System.out.println(num1+" / "+num2+" = " + result);
                break;
            case '%': 
                result = num1%num2;
                System.out.println(num1+" % "+num2+" = " + result);
                break;
            // 因为已经做了前置校验,default分支实际不会触发,保留做兜底即可
            default:
                System.out.println("Invalid operator");
            break;
        }
        input.close();
    }
}

效果说明

修改后如果用户输入非法运算符,会立刻提示重新输入,直到输入合法运算符才会进入后续数字输入环节,不会再出现输入完两个数字后才报错的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 21:36:00