如何将方法从Array传输到ArrayList

时间:2016-11-27 01:52:53

标签: java arrays arraylist

所以我试图做的就是转移我的Array方法来反转我的数组并将其他两个合并到ArrayLists中。除了这两个方法之外,我已经能够使用我拥有的所有其他方法。我从反向方法中得到一个错误,该方法表示意外类型,必需变量,找到的值。我不知道该怎么做才能解决它。以下是我在Array类中的工作方法:

/***        <<< CODE COMPLETE >>>
    * reverses the order of the elemets in the array 
    ***/
    public static void reverse(int[] a)
    {
        for (int i = 0; i < a.length/2; i++)
        {
            int reverseOrder = a[i];
            a[i] = a[a.length - 1 - i];
            a[a.length - 1 - i] = reverseOrder;
        }
    }

   /***        <<< CODE COMPLETE >>>
    * merges two sorted arrays into 1 new array, maintains the sorted order 
    ***/
    public static int[] merge(int[] a, int[] b) 
    {
        int[] merge = new int[a.length + b.length];
        int i = 0, j = 0, k = 0;

        while (i < a.length && j < b.length)
        {
            if (a[i] < b[j])
            {
                merge[k++] = a[i++];
            }

            else        
            {
                merge[k++] = b[j++];
            }
        }

        while (i < a.length)
        {
            merge[k++] = a[i++];
        }


        while (j < b.length)  
        {
            merge[k++] = b[j++];
        }

        return merge;
    }

这就是我一直在尝试将这些Array放入ArrayList中:

/***        <<< CODE NOT COMPLETE >>>
   * reverses the order of the elemets in the array 
   ***/
  public static void reverse(ArrayList <Integer> a)
   {
       for (int i = 0; i < a.size()/2; i++)
       {
           int reverseOrder = a.get(i);
           a.get(i) = a.get(a.size() - 1 - i);
           a.get(a.size() - 1 - i) = reverseOrder;
       }
   } 

   /***        <<< CODE NOT COMPLETE >>>
   * merges two sorted arrays into 1 new array, maintains the sorted order 
   ***/
   public static ArrayList <Integer> merge (ArrayList <Integer> a, ArrayList <Integer> b) 
   {
       ArrayList <Integer> merge = new ArrayList <Integer> (a.size() + b.size());
       int i = 0, j = 0, k = 0;

       while (i < a.size() && j < b.size())
       {
            if (a.get(i) < b.get(j))
            {
                merge.get(k++) = a.get(i++);
            }

            else        
            {
                merge.get(k++) = b.get(j++);
            }
       }

       while (i < a.size())
       {
           merge.get(k++) = a.get(i++);
       }

       while (j < b.length)  
       {
           merge.get(k++) = b.get(i++);
       }

       return merge;
   }

2 个答案:

答案 0 :(得分:0)

我在这里看到的主要问题是在左侧使用.get().get()为您提供该索引处的内容,但它与数组的不同之处在于它不允许您在那里设置任何内容。

为此,您需要set()

例如,您的第一个方法应该有:

a.set(i, a.get(a.size() - 1 - i));

而不是:

a.get(i) = a.get(a.size() - 1 - i);

以下是set()方法上的JavaDocs,如果你想稍微阅读它(它非常简单)。基本上,数组arr[i]会为您提供i的值,但也允许您在索引i处设置内容。对于ArrayList,这两个操作是不同的方法。

https://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html#set(int,%20E)

答案 1 :(得分:0)

好吧,我看到的主要问题是你的工作中有很多这样的代码:

merge.get(i) = a.get(j);

实际上什么也没做。原因是get实例的ArrayList方法只返回您传入的索引的当前值。您无法使用此方法在此索引处设置值,因为您必须使用实例方法set,如下所示:

merge.set(i, a.get(j));

其中i是您要设置的索引,a.get(j)是您要将该索引设置为的值。