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
相关产品推荐
相关产品推荐

