如何用Switch语句对input.nextInt/nextDouble获取的数执行数学运算
修正后的Java计算器实现(基于Switch语句)
原代码存在的问题
- Switch分支缺少
break(如add分支未添加,会导致执行后续分支) - 变量命名不符合语义(如
integers_1这类命名无法体现变量用途) - 仅读取单个输入值,未完成两数运算的核心逻辑
- 字符串比较冗余:无需创建新
String对象,直接调用equals即可 - 拼写错误:
substract应为subtract alphabetize分支输入异常:nextLine()会读取之前输入操作符后的换行符,导致无法正确获取字符串- 代码结构错误:
if语句闭合括号缺失,导致else无法正确匹配
完整修正代码
import java.util.Scanner; public class Calculator { public static void main(String[] args) { System.out.println("List of operations: add subtract multiply divide alphabetize"); Scanner input = new Scanner(System.in); System.out.print("Enter an operation: "); String operation = input.nextLine().toLowerCase(); switch (operation) { case "add": System.out.print("Enter two integers: "); int addNum1 = input.nextInt(); int addNum2 = input.nextInt(); System.out.println("Result: " + (addNum1 + addNum2)); break; case "subtract": System.out.print("Enter two integers: "); int subNum1 = input.nextInt(); int subNum2 = input.nextInt(); System.out.println("Result: " + (subNum1 - subNum2)); break; case "multiply": System.out.print("Enter two numbers: "); double mulNum1 = input.nextDouble(); double mulNum2 = input.nextDouble(); System.out.println("Result: " + (mulNum1 * mulNum2)); break; case "divide": System.out.print("Enter two numbers: "); double divNum1 = input.nextDouble(); double divNum2 = input.nextDouble(); if (divNum2 == 0) { System.out.println("Error: Cannot divide by zero"); } else { System.out.println("Result: " + (divNum1 / divNum2)); } break; case "alphabetize": // 清除之前nextInt/nextDouble遗留的换行符 input.nextLine(); System.out.print("Enter two strings separated by space: "); String[] words = input.nextLine().split(" ", 2); if (words.length == 2) { String sorted = words[0].compareTo(words[1]) <= 0 ? words[0] + " " + words[1] : words[1] + " " + words[0]; System.out.println("Alphabetized result: " + sorted); } else { System.out.println("Please enter two valid strings"); } break; default: System.out.println("Invalid value."); } input.close(); } }
关键修改说明
- 移除冗余的
if判断,改用switch的default分支处理无效操作,逻辑更简洁 - 每个
switch分支添加break,避免分支穿透 - 完善所有运算的输入读取与结果计算逻辑,新增除法的除零异常判断
- 修正
substract的拼写错误为subtract - 优化变量命名,使其更具语义性
- 修复
alphabetize分支的输入问题:先清除输入流中遗留的换行符,再读取并排序字符串 - 添加
Scanner关闭操作,避免资源泄漏
内容的提问来源于stack exchange,提问作者user20716077
相关产品推荐
相关产品推荐

