递归 - 将两个列表中的数字添加到新列表中

时间:2015-02-06 16:04:24

标签: java recursion arraylist parameters

#1。

我有两个ArrayLists,一个包含数字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++;
    }
 }
}

2 个答案:

答案 0 :(得分:0)

您可以实施的简单解决方案只是在您的计数而不是较小列表的大小时运行while循环。在您拥有的现有while循环之后,您可以简单地迭代将较大列表中的其余元素添加到list3

你自己尝试写这个是一个很好的练习。请注意,您当前的错误是您的方法在list1中的索引6处查找元素的结果,但显然该索引没有值。

答案 1 :(得分:0)

`public static void main(String [] args){         的System.out.println(&#34;初始化&#34);         List list1 = new ArrayList&lt;&gt;();         List list2 = new ArrayList&lt;&gt;();

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

    List<Integer> list3=recursive(list1, list2, new ArrayList<Integer>());

    Iterator<Integer> it=list3.iterator();
    while(it.hasNext())
    {
        System.out.print(it.next() +" ");
    }

}

private static List<Integer> recursive(List<Integer>list1, List<Integer> list2,List<Integer> list3)
{
    if(list1.isEmpty()&&list2.isEmpty())
    {
        return list3;
    }
    if(!list1.isEmpty())
    {
     list3.add(list1.remove(0));
    }
    if(!list2.isEmpty())
    {
     list3.add(list2.remove(0));
    }
     return recursive(list1, list2,list3);
}`