所以我要做的是将我的Array类中的一些方法从常规Arrays转换为ArrayLists。但是,我遇到了两个截然不同的问题。首先,在反转我的ArrayList的顺序时,我注意到奇怪的是它打印出来说,如果我有6个整数,并且我试图反转,它将打印出前3个的索引位置和实际的整数最后3.例如,它将打印出来:逆序:5,4,3,96,87,24,顺序:false。我希望它打印出来的是941,874,102,96,87,24,顺序:假。关于我的两个数组列表的合并,我不确定它是否会正确合并,因为我不知道如何转换这行代码来打印出一个ArrayList。我使用这两行代码原来打印出我合并的数组。
int merged[] = merge(num3,num4);
print(merged);
以下是我用来反转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.set(i, a.size() - 1 - i);
a.set(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.set(k++, a.get(i++));
}
else
{
merge.set(k++, b.get(j++));
}
}
while (i < a.size())
{
merge.set(k++, a.get(i++));
}
while (j < b.size())
{
merge.set(k++, b.get(i++));
}
return merge;
}
答案 0 :(得分:1)
在public static void reverse(ArrayList <Integer> a)
,
a.set(i, a.size() - 1 - i); // <-- the index, not the value.
a.set(a.size() - 1 - i, reverseOrder);
应该是
a.set(i, a.get(a.size() - 1 - i)); // <-- the value.
a.set(a.size() - 1 - i, reverseOrder);
您的merge
中也有一个拼写错误,您在最后一个循环中使用i++
。但实际上,您应该更喜欢List
界面。此外,您不需要k
,因为List
保留了内部索引。您也不需要明确调整List
的大小(但我在这里做的是与您的代码保持一致)。而且,我会存储size
(s)。像,
public static List<Integer> merge(List<Integer> a, List<Integer> b) {
final int aLen = a.size(), bLen = b.size();
List<Integer> al = new ArrayList<>(aLen + bLen);
int i = 0, j = 0;
while (i < aLen && j < bLen) {
if (a.get(i) < b.get(j)) {
al.add(a.get(i++));
} else {
al.add(b.get(j++));
}
}
while (i < aLen) {
al.add(a.get(i++));
}
while (j < b.size()) {
al.add(b.get(j++));
}
return al;
}