【发布时间】:2015-02-06 16:04:23
【问题描述】:
堆栈溢出。
我有两个 ArrayList,一个包含数字 1,2,3,4,5(list1),另一个包含 6,7,8,9,10,11,12 (list2)。
我正在编写一个递归程序,将所有这些数字添加到一个新列表(list3)中。它必须添加 list1 中的第一个数字,然后是 list2 中的第一个数字,然后是 list1 中的第二个数字,然后是 list2 中的第二个数字,依此类推。
如果其中一个列表包含的数字比另一个多,那么它应该简单地将剩余的数字添加到列表的后面。在这种情况下,应添加数字 11 和 12。
我现在得到的输出是:[1, 6, 2, 7, 3, 8, 4, 9, 5, 10] 但它应该是: [1, 6, 2, 7, 3, 8, 4 , 9, 5, 10, 11, 12]
错误是“java.lang.IndexOutOfBoundsException:索引:5,大小:5”,但我不知道如何解决这个问题。 它说我添加到 list3 的两行有错误。
任何帮助将不胜感激。
import java.util.ArrayList;
import java.util.List;
public class Ex12_2_alternate {
public static void main(String[] args){
List<Integer> list1 = new ArrayList<>();
List<Integer> list2 = new ArrayList<>();
//adds 1 - 5 (both incl.) to list1
for (int i = 1; i <= 5; i++) {
list1.add(i);
}
// adds 6 - 12 (both incl.) to list2
for (int i = 6; i <= 12; i++) {
list2.add(i);
}
System.out.println("list1: " + list1);
System.out.println("list2: " + list2);
alternate(list1,list2);
}
private static void alternate(List<Integer> list1, List<Integer> list2) {
List<Integer> list3 = new ArrayList<Integer>();
int j = 0;
int k = list1.size() + list2.size();
while (j < k) {
list3.add(list1.get(j));
list3.add(list2.get(j));
System.out.println("list3 so far: " + list3);
j++;
}
}
}
【问题讨论】:
-
该代码中没有递归。
-
当 J = 6 时,
list3.add(list1.get(j));会做什么? -
这个程序不是递归的,它是迭代的。此外, k 将始终大于 list1 和 list2 的大小(因为您将它们的大小相加),因此您将始终超出范围。您需要确定哪个列表更小并在该大小上循环。然后遍历更大列表的剩余元素。
-
@molbdnilo,哦...我认为它有一点递归。我还有多远?
-
@chancea, IndexOutOfBounds: Index: 6, Size: 5
标签: java recursion arraylist parameters