所以我试图做的就是转移我的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;
}
答案 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)
是您要将该索引设置为的值。