我不能为我的生活理解为什么这段代码不起作用。我正在创建一个函数来评估给定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
答案 0 :(得分:3)
我强烈怀疑它抛出了一个ArrayIndexOutOfBoundsException,它在这个方法之外被吞没了。
您正在创建一个大小为n
的数组,在本例中为10,但您的计数器从零变为f
(也是10),这是总共11个元素。所以至少有一个是一个一个接一个。
查看代码并找到说
的位catch (Exception e) {
}
并将其更改为
catch (Exception e) {
e.printStackTrace();
}
帮助更轻松地发现此类错误。
答案 1 :(得分:1)
不幸的是我还不能发表评论,因为这不是一个具体的答案,但我检查并运行你的代码,它运行正常。用固定的系数和度数代替表明包围都很好并且你没有(我怀疑)重新初始化内部范围中的resultArray变量。
这是您有问题的代码的直接复制/粘贴吗?
通常当我遇到这样的问题时,它与赋值无关,而是因为'resultsArray'实际上是我错误分配的2个不同变量,但由于多态性我没有收到任何错误。