我将使用数学符号编写的以下两个函数转录为Java代码时遇到困难(两个函数的输入都是带有D元素的数组):
有人可以看看下面的代码并告诉我它是否有问题吗?
public double firstFunction(double[] arrayOfElements) {
double sum = 0;
double sumTwo = 0;
for(int i = 0; i < arrayOfElements.length; i++) {
for(int j = 0; j < i; j++){
sumTwo = sumTwo + arrayOfElements[j];
}
sum = sum + Math.pow(sumTwo, 2);
}
return sum;
}
public double secondFunction(double[] arrayOfElements) {
double maximum = Math.abs(arrayOfElements[0]);
for (int i = 0; i < arrayOfElements.length; i++) {
if (Math.abs(arrayOfElements[i]) > maximum) {
maximum = Math.abs(arrayOfElements[i]);
}
}
return maximum;
}
答案 0 :(得分:1)
第一种方法应该在每次迭代中将sumTwo
重置为零。目前,它累积从外循环执行到下一循环的值。否则就可以了。
或者,更有效率,您可以注意到一次迭代的sumTwo
与下一次迭代之间的差异是新的数组元素。这意味着您不需要内循环。
for(int i = 0; i < arrayOfElements.length; i++) {
sumTwo = sumTwo + arrayOfElements[j];
sum = sum + Math.pow(sumTwo, 2);
}
第二种方法应该返回具有最大绝对值的元素的索引,而不是元素本身。请注意最大
中的子索引 i