我在使用下面的 Java 时遇到问题。 data_array
是数组的 ArrayList。我试图使用“for”循环访问 ArrayList 中的所有数组,但由于某种原因我无法在 ArrayList 上执行 .get
。任何帮助将非常感激!谢谢!
public static double calc_SMA (Collection<Double> data_array, int bar_avg, int array_position){
//Create array to select which array in the ArrayList to pull from
double [] holding = new double [4];
//variable to hold the sum of the bars
double sum = 0.0;
//Create loop to pull data via...put into avg_calc
for (int i = 0; i < bar_avg; i++) {
//Cycle through arrays within the data_array ArrayList starting from first row to bar_avg - 1
holding = data_array.get(i);
//Add value to the previous value with 'sum'
//array_position is the place (0-3) that we are calculating avg of
sum = sum + holding[array_position];
//clear holding array
holding = null;
}
double average = sum/bar_avg;
return average;
}
最佳答案
(至少)有几个问题导致它无法编译。
第一个在那里 is no Collection.get
method 。而不是采取 Collection<Double>
,取a List<Double>
相反(ArrayList 符合 List)。
解决后,下一个问题是 List<Double>.get(int) => Double
,但是holding
是 double[]
因此该分配无效。
循环i in [0, avg_bar)
也很可疑但使用data_array.get(i)
;这是无效索引的秘诀。虽然这可以通过删除 get(i)
来解决并循环迭代器..
无论如何,我怀疑一个大问题是计算SMA的算法不正确。 。考虑删除 holding[]
数组变量并直接使用每个 data_array 值(P_n、P_n-1 等)来计算总和。
关于Java:从 ArrayList 引用数组作为方法输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25798003/