2016-11-27 55 views
1

所以我想做的事情就是传递我的Array方法,它们颠倒我的数组并将其他两个合并到ArrayList中。除了这两个方法之外,我已经能够用我拥有的所有其他方法来做到这一点。我从我的反向方法得到一个错误,说错误的类型,必需的变量,找到的值。我不知道该如何解决它。下面是我的Array类我的工作方法:如何将一个方法从Array传递到ArrayList

/***  <<< 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; 
    } 

和这里是我一直在尝试做做这些阵列的到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; 
    } 

回答

0

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

为此,您需要set()

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

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

而不是:如果你想阅读它有点

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

下面是对set()方法JavaDoc中(这是非常简单)。基本上用数组arr[i]为您提供的值为i,但也允许您设置索引i的内容。对于ArrayList这两个操作是单独的方法。

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

+0

好的,至少让我用我的反向方法进行编译。但是,我仍然遇到一些问题。例如,在我正在反转的数组中,它打印前3个整数的索引位置,然后最后3个是实际正确的整数。奇怪的是,它对于它应该做的命令返回错误。所以编译器认识到它不是按顺序的,但是它只打印出一半的数字。用我的合并,它编译,但在我的主要方法,我不知道如何将其转换为ArrayList,所以我不明白,如果逻辑是正确的。 –

+0

这是我用来合并数组的数组版本,但我不知道该怎么办才能将它与正在使用的ArrayList进行合并:int merged [] = merge(num3,num4); print(merged); –

0

好了,所以我认为主要的问题是,你必须在你的工作很多这样的代码:

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

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

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

我在哪里就是你要设置的索引,a.get(j)是你想要设置索引值。

+0

好的,至少让我用我的反向方法进行编译。但是,我仍然遇到一些问题。例如,在我正在反转的数组中,它打印前3个整数的索引位置,然后最后3个是实际正确的整数。奇怪的是,它对于它应该做的命令返回错误。所以编译器认识到它不是按顺序的,但是它只打印出一半的数字。用我的合并,它编译,但在我的主要方法,我不知道如何将其转换为ArrayList,所以我不明白,如果逻辑是正确的。 –

+0

这是我用来合并数组的数组版本,但我不知道该怎么做才能将它与正在使用的ArrayList进行合并:int merged [] = merge(num3,num4);打印(合并); –

+0

你可以添加打印索引位置的代码吗? –

相关问题