【问题标题】:Java: Referencing array from ArrayList as method inputJava:从 ArrayList 引用数组作为方法输入
【发布时间】:2014-11-06 00:37:03
【问题描述】:

我在使用下面的 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;
  }

【问题讨论】:

    标签: java arrays methods input arraylist


    【解决方案1】:

    关于为什么它不能编译有几个问题(至少)。

    第一个是is no Collection.get method。不要使用Collection&lt;Double&gt;,而是使用a List&lt;Double&gt;(ArrayList 符合 List)。

    解决后下一个问题是List&lt;Double&gt;.get(int) =&gt; Double,但holdingdouble[],因此分配无效。


    循环i in [0, avg_bar)但使用data_array.get(i)也很可疑;这是无效索引的秘诀。虽然可以通过删除 get(i) 并循环迭代器来解决此问题..

    无论如何,我怀疑一个大问题是计算SMA 的算法不正确。考虑删除 holding[] 数组变量并直接使用每个 data_array 值(P_n、P_n-1 等)来计算总和。

    【讨论】:

    • 或者,您可以使用data_array.toArray (new Double[data_array.size ()])Collection 转换为数组,然后从那里开始。但是最初将它放在List....中会更容易。
    • 谢谢,我最终选择了一个迭代器!完成后我会发布工作代码!
    【解决方案2】:

    接口Collection本身没有.get()方法。

    http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html

    您可以检查您是否通过了实现 Collection 的类之一,该类具有 .get() 方法,例如ArrayList 然后投吧。

    否则,您可以使用 data_array.iterator() 并使用它来遍历集合以访问每个项目。

    【讨论】:

      【解决方案3】:

      您不能使用 .get 方法,因为您要求的是“集合”而不是“列表”

      'Collection' 是一个比 List 更高的接口,它没有 get 方法。 如此处所示 -> http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html

      改为使用列表。

      或者(您不应该)将集合转换为数组。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-02-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-10-09
        • 1970-01-01
        相关资源
        最近更新 更多