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

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数值

修复步骤

  1. 修正mathe类的变量类型:去掉错误的Main类型成员变量,改为在运算方法里直接接收int类型参数
  2. 重构mathe的方法:让每个运算方法接收两个int参数,完成计算后输出结果
  3. 简化主方法的逻辑:只创建一个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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 23:32:49