Java实现计算器时跨类使用运算符报错的解决咨询
修复计算器代码的运算符错误
让我们一步步拆解并修复你的代码问题:
核心错误原因
你碰到的"无法对com.company.Main使用运算符"错误,根源在mathe类里的变量定义:
Main int1 = new Main(); Main int2 = new Main();
你把本该用来存储数字的int1和int2实例成了Main类的对象,而不是int类型的数值变量,自然没法对类对象做加减乘运算。
除此之外,代码还有几个逻辑设计上的问题:
- 主方法里创建了多个不必要的
mathe对象(decrease、answer、operator),其实一个实例就足够 - 调用
mathe的方法时,错误地传递了answer.toString(),完全没把用户输入的两个数字传进去 mathe的方法参数设计不合理,不需要传String answer,应该直接接收两个待计算的int数值
修复步骤
- 修正
mathe类的变量类型:去掉错误的Main类型成员变量,改为在运算方法里直接接收int类型参数 - 重构
mathe的方法:让每个运算方法接收两个int参数,完成计算后输出结果 - 简化主方法的逻辑:只创建一个
mathe实例,把用户输入的两个数字传给对应的运算方法
修复后的完整代码
Main类
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner input = new Scanner(System.in); mathe calculator = new mathe(); // 只需要一个计算器实例 int int1, int2; System.out.println("What do you want to do?"); String chosenOperator = input.nextLine(); System.out.print("Add a number: "); int1 = input.nextInt(); System.out.print("Add another number: "); int2 = input.nextInt(); // 根据选择的运算符调用对应方法,传入两个数字 if (chosenOperator.equalsIgnoreCase("Decrease") || chosenOperator.equals("-")) { calculator.decrease(int1, int2); } else if (chosenOperator.equalsIgnoreCase("Adding") || chosenOperator.equals("+")) { calculator.add(int1, int2); // 把adaption改成更语义化的add } else if (chosenOperator.equalsIgnoreCase("Times") || chosenOperator.equals("*")) { calculator.times(int1, int2); } else { System.out.println("Unknown operator!"); } input.close(); } }
mathe类(建议改成MathCalculator更符合Java命名规范,这里保留原类名)
public class mathe { public void decrease(int num1, int num2){ int answer = num1 - num2; System.out.println("Result: " + answer); } // 把adaption改成add,语义更清晰 public void add(int num1, int num2){ int answer = num1 + num2; System.out.println("Result: " + answer); } public void times(int num1, int num2){ int answer = num1 * num2; System.out.println("Result: " + answer); } }
额外优化建议
- 类名遵循Java规范:首字母大写,比如把
mathe改成MathCalculator - 支持小数计算:把int改成double类型,适配更多计算场景
- 增加异常处理:比如捕获用户输入非数字时的异常,提升程序稳定性
内容的提问来源于stack exchange,提问作者Darney
相关产品推荐
相关产品推荐

