为什么此输出为0.0 0.0 0.0 0.0而不是execute方法的返回计算?

时间:2020-08-18 10:01:45

标签: java arrays methods switch-statement

我正在尝试让main方法为数组的每次迭代打印来自execute方法的switch语句的返回结果。但是,输出为:

0.0 0.0 0.0 0.0

谁能告诉我为什么会这样?

    public static void main(String[] args) {
        double[] leftVal = {100.0d, 25.0d, 225.0d, 11.0d};
        double[] rightVal = {50.0d, 92.0d, 17.0d, 3.0d};
        char[] opCodes = {'d', 'a', 's', 'm'};
        double[] results = new double[opCodes.length];

        for (int i = 0; i < opCodes.length; i++) {
            execute(opCodes[i], leftVal[i], rightVal[i]);
        }

        for (double currentResult : results) {
            System.out.println(currentResult);
        }
    }

    static double execute(char opCodes, double leftVal, double rightVal) {
        double result;
        switch (opCodes) {
            case 'a':
                result = leftVal + rightVal;
                break;
            case 's':
                result = leftVal - rightVal;
                break;
            case 'm':
                result = leftVal * rightVal;
                break;
            case 'd':
                result = rightVal != 0 ? leftVal / rightVal : 0.0d;
                break;
            default:
                System.out.println("Invalid opCode: " + opCodes);
                result = 0.0d;
                break;
        }
        return result;
    }
}

3 个答案:

答案 0 :(得分:0)

您缺少分配,没有填写results数组。 您可能正在寻找这个:

for (int i = 0; i < opCodes.length; i++) {
  results[i] = execute(opCodes[i], leftVal[i], rightVal[i]);
}

答案 1 :(得分:0)

我首先看到的是,您不使用return double

    public static void main(String[] args) {
        double[] leftVal = {100.0d, 25.0d, 225.0d, 11.0d};
        double[] rightVal = {50.0d, 92.0d, 17.0d, 3.0d};
        char[] opCodes = {'d', 'a', 's', 'm'};
        double[] results = new double[opCodes.length];

        for (int i = 0; i < opCodes.length; i++) {
            results[i] = execute(opCodes[i], leftVal[i], rightVal[i]);
        }

        for (double currentResult : results) {
            System.out.println(currentResult);
        }
    }

    static double execute(char opCodes, double leftVal, double rightVal) {
        double result;
        switch (opCodes) {
            case 'a':
                result = leftVal + rightVal;
                break;
            case 's':
                result = leftVal - rightVal;
                break;
            case 'm':
                result = leftVal * rightVal;
                break;
            case 'd':
                result = rightVal != 0 ? leftVal / rightVal : 0.0d;
                break;
            default:
                System.out.println("Invalid opCode: " + opCodes);
                result = 0.0d;
                break;
        }
        return result;
    }
}

如果您的方法按其应有的方式工作,则应如此

答案 2 :(得分:0)

在for语句中,没有赋值来用值填充数组。

for (int i = 0; i < opCodes.length; i++) {
        execute(opCodes[i], leftVal[i], rightVal[i]);
    }

在您的execute方法中,返回双精度结果。用它作为赋值来填充结果数组。

for (int i = 0; i < opCodes.length; i++) {
        results[i] = execute(opCodes[i], leftVal[i], rightVal[i]);
    }