Java创建数组时能否同时使用double和int类型作为长度参数?
错误原因及修复方案
核心报错原因
- 数组的长度参数、下标索引都只支持int类型的非负整数,你代码中两次用到double类型的参数
x操作数组,直接触发类型不匹配错误:- 第80行
double[][] NAIVE_SINE = new double[x][n];:用double类型的x作为数组第一维的长度,不符合Java语法要求 - 第96行
NAIVE_SINE[x][n] = sum;:用double类型的x作为数组下标,同样不符合语法要求,且即使转成int类型,也会因为x的取值可能超出数组下标合法范围(0到数组长度-1)触发数组越界异常
- 第80行
- 附加逻辑问题:
- 你当前方法定义返回值为double类型的正弦计算结果,但最终写死返回0,无法得到正确计算结果
- 若
NAIVE_SINE是用于缓存计算结果的二维数组,不应该在方法内部每次调用时新建,会导致缓存失效,建议将其提升为类的静态成员,且提前确认存储维度的合法整数范围
修复后示例代码
如果你不需要缓存计算结果,可以直接去掉NAIVE_SINE相关的数组操作,调整后的代码如下:
public static double naiveSine(double x, int n) { if (n < 0) { System.out.println("ERROR"); return Double.NaN; } double sum = 0; for (int i = 1; i <= n; i++) { double term = 1; // 适配泰勒展开项的计算逻辑调整循环边界 for (int j = 1; j <= 2*i - 1; j++){ term = term * (x/j); } if (i % 2 == 0) { sum -= term; } else { sum += term; } } return sum; }
如果确实需要缓存结果,需要先将x映射为合法的int类型索引,且提前定义数组的固定长度,不能用输入参数x动态定义数组长度。
内容的提问来源于stack exchange,提问作者Saehwan Park
相关产品推荐
相关产品推荐

