我正在尝试让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;
}
}
答案 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]);
}