初始化Double java数组
我一辈子都无法理解为什么这个代码不起作用。我正在创建一个函数,以用户指定的频率,在给定的x间隔的所有点上计算多项式。我的基本多项式代码与这个问题无关。我的问题是用从Horner方法获得的值填充数组
public double[] evalAt(double s, double f, int n) {
double[] resultArray = new double[n];
double h =((f - s)/(n));
if(s==f) {
double tempResult = 0;
for (int i = this.degree; i >= 0; i--) {
tempResult = tempResult * s + this.terms[i].getCoefficient();
}
resultArray[0] = tempResult;
} else {
int counter = 0;
for(double i = s; i <= f; i=i+h) {
double tempResult = 0;
for (int j = this.degree; j >= 0; j--) {
tempResult = tempResult * i + this.terms[j].getCoefficient();
}
System.out.println("Counter: " + counter + " Result @ Counter: " + tempResult);
resultArray[counter++] = tempResult;
}
System.out.println(resultArray[0]);
System.out.println(resultArray[1]);
System.out.println(resultArray[2]);
System.out.println(resultArray[3]);
}
return resultArray;
}
我在那里有一个print
语句来显示计数器的值和临时结果。然后我使用resultArray['index'] = 'value';
语法。当我运行这个程序时,我看到计数器和值与我想要的完全一样,但是当我使用底部的四个print
语句检查数组时,什么也没有发生。我的输入是0,10,10
:
输出:
Counter: 0 Result @ Counter: 0.0
Counter: 1 Result @ Counter: 1.0
Counter: 2 Result @ Counter: 4.0
Counter: 3 Result @ Counter: 9.0
Counter: 4 Result @ Counter: 16.0
Counter: 5 Result @ Counter: 25.0
Counter: 6 Result @ Counter: 36.0
Counter: 7 Result @ Counter: 49.0
Counter: 8 Result @ Counter: 64.0
Counter: 9 Result @ Counter: 81.0
Counter: 10 Result @ Counter: 100.0
# 1 楼答案
不幸的是,我还不能发表评论,因为这不是一个具体的答案,但我已经检查并运行了你的代码,它对我来说运行良好。用固定的系数和度数代入表示括号内的一切都很好,并且(正如我所怀疑的)没有在内部范围内重新初始化resultArray变量
这是你的问题代码的直接复制/粘贴吗
通常,当我遇到这样的问题时,这与赋值无关,而是因为'resultsArray'实际上是两个不同的变量,我错误地分配了它们,但由于多态性,我没有收到任何错误
# 2 楼答案
我强烈怀疑它抛出了一个ArrayIndexOutOfBoundsException,它在这个方法之外被吞没了
您正在创建一个大小为
n
的数组,在本例中为10,但您的计数器从0变为f
(也是10),总共有11个元素。所以至少其中一个有一个是错的仔细检查你的代码,找到上面的代码
把它改成
以帮助更容易地捕捉此类错误