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

Java多类特定方法计算器开发求助:调用Calculator2类报错

Java计算器开发错误排查与修复

我要开发一个多类结构的Java计算器,要求Calculator2类独立实现add、subtract、multiply、divide方法,App类必须使用指定的getString(String prompt)和getDouble(String prompt)方法,程序要遵循交互流程运行。但调用Calculator2类时出现以下错误:

cannot find symbol variable operator
cannot find symbol variable calculator2Object
cannot find symbol variable result

我试过else if、switch、提取首字母转char等方法都没解决,求技术帮助。


原代码

App类

import java.util.Scanner;

public class App {
    private static final Scanner inputScanner = new Scanner(System.in);

    public static void main(String[] args) {
        System.out.println("What would you like to do?");
        System.out.println("add");
        System.out.println("subtract");
        System.out.println("multiply");
        System.out.println("divide");
        System.out.println("exit");
        String operator = inputScanner.nextLine();
        Double userInput = getDouble();
        Double math = getString();
    }

    private static double getString() {
        char choice = operator.charAt(0);
        switch (choice) {
            case 'a':
                calculator2Object.add();
                System.out.println();
                return result = operator;
                break;
            case 's':
                calculator2Object.subtract();
                System.out.println();
                break;
            case 'm':
                calculator2Object.multiply();
                System.out.println();
                break;
            case 'd':
                calculator2Object.divide();
                System.out.println();
                break;
            case 'e':
                System.out.println("Goodbye");
                System.exit(0);
        }
    }

    private static double getDouble() {
       System.out.println("Enter the first number: ");
       double firstNumber = inputScanner.nextDouble();
       System.out.println("Enter the second number: ");
       double secondNumber = inputScanner.nextDouble();
       return firstNumber + secondNumber;
    }
}

Calculator2类

public class Calculator2 {
        double add(double firstNumber, double secondNumber) {
            double result = firstNumber + secondNumber;
            System.out.println(result);
            return result;
        }

        double subtract(double firstNumber, double secondNumber) {
            double result = firstNumber - secondNumber;
            System.out.println(result);
            return result;
        }

        double multiply(double firstNumber, double secondNumber) {
            double result = firstNumber * secondNumber;
            System.out.println(result);
            return result;
        }

        double divide(double firstNumber, double secondNumber) {
            double result = firstNumber / secondNumber;
            System.out.println(result);
            return result;
        }
    }

错误原因解析

  1. cannot find symbol variable operator:operator是main方法的局部变量,getString方法无法直接跨作用域访问,需通过参数传递。
  2. cannot find symbol variable calculator2Object:未创建Calculator2类的实例对象,直接调用了不存在的变量。
  3. cannot find symbol variable result:result未定义,且return result = operator逻辑错误——字符串类型的operator无法赋值给数值类型变量。
  4. 额外问题:getString方法返回值为double但部分分支无返回值;getDouble直接返回两数之和,不符合"获取输入"的需求;调用Calculator2方法时未传递必要的数字参数。

修正后的代码

App类

import java.util.Scanner;

public class App {
    private static final Scanner inputScanner = new Scanner(System.in);

    public static void main(String[] args) {
        while (true) {
            System.out.println("What would you like to do?");
            System.out.println("add");
            System.out.println("subtract");
            System.out.println("multiply");
            System.out.println("divide");
            System.out.println("exit");
            
            // 获取操作符输入
            String operator = getString("Enter your choice: ");
            if (operator.equalsIgnoreCase("exit")) {
                System.out.println("Goodbye");
                break;
            }

            // 获取两个数字输入
            double firstNum = getDouble("Enter the first number: ");
            double secondNum = getDouble("Enter the second number: ");

            // 创建Calculator2实例
            Calculator2 calculator = new Calculator2();
            double result = 0;

            // 根据操作符执行对应计算
            switch (operator.toLowerCase().charAt(0)) {
                case 'a':
                    result = calculator.add(firstNum, secondNum);
                    break;
                case 's':
                    result = calculator.subtract(firstNum, secondNum);
                    break;
                case 'm':
                    result = calculator.multiply(firstNum, secondNum);
                    break;
                case 'd':
                    if (secondNum == 0) {
                        System.out.println("Error: Cannot divide by zero");
                        continue;
                    }
                    result = calculator.divide(firstNum, secondNum);
                    break;
                default:
                    System.out.println("Invalid choice, please try again");
                    continue;
            }
            System.out.printf("Result: %.2f%n", result);
        }
        inputScanner.close();
    }

    // 符合要求的getString方法,接收prompt参数
    private static String getString(String prompt) {
        System.out.print(prompt);
        return inputScanner.nextLine().trim();
    }

    // 符合要求的getDouble方法,接收prompt参数
    private static double getDouble(String prompt) {
        System.out.print(prompt);
        while (!inputScanner.hasNextDouble()) {
            System.out.println("Invalid number, please try again");
            inputScanner.next(); // 清除无效输入
            System.out.print(prompt);
        }
        double num = inputScanner.nextDouble();
        inputScanner.nextLine(); // 清除换行符,避免影响后续字符串输入
        return num;
    }
}

Calculator2类(调整方法访问权限为public)

public class Calculator2 {
    public double add(double firstNumber, double secondNumber) {
        double result = firstNumber + secondNumber;
        return result;
    }

    public double subtract(double firstNumber, double secondNumber) {
        double result = firstNumber - secondNumber;
        return result;
    }

    public double multiply(double firstNumber, double secondNumber) {
        double result = firstNumber * secondNumber;
        return result;
    }

    public double divide(double firstNumber, double secondNumber) {
        double result = firstNumber / secondNumber;
        return result;
    }
}

关键修正点

  • 将operator通过参数传递给处理方法,解决变量作用域问题。
  • 创建Calculator2实例对象,调用方法时传入必要的数字参数。
  • 修正getString和getDouble的方法签名,符合带prompt参数的要求,同时修复输入处理逻辑(如清除换行符、校验数字输入)。
  • 增加循环逻辑,支持多次计算直到用户选择退出。
  • 增加除零判断,避免运行时异常。
  • 调整Calculator2的方法访问权限为public,确保App类可调用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 08:55:35