当一个大于另一个时,尝试通过交错合并两个ArrayLists抛出IndexOutOfBoundsException

时间:2015-08-04 20:43:45

标签: java arraylist

当ArrayList a大于b时,下面的代码与IndexOutOfBoundsException崩溃但是当它们大小相等或b更大时它可以正常工作

public class Q2 {

    /*this is the test for my code there has to be two arraylists */
    public static void main(String[] args) {
        ArrayList<Integer> a = new ArrayList<Integer>();
        a.add(2);
        a.add(3);
        a.add(7);
        a.add(1);
        a.add(10);
        ArrayList<Integer> b = new ArrayList<Integer>();
        b.add(1);
        b.add(2);
        b.add(3);
        b.add(9);

        System.out.print(merges(a, b));
    }

    public static ArrayList<Integer> merges(ArrayList<Integer> a, ArrayList<Integer> b) {

        ArrayList<Integer> merges = new ArrayList<Integer>();
        for (int i = 0; i < a.size(); i++) {
            merges.add(a.get(i));
            merges.add(b.get(i));
        }

        if (b.size() > a.size()) {
            for (int i = a.size(); i < b.size(); i++) {
                merges.add(b.get(i));
            }
        }
        else if (a.size() > b.size()) {
            for (int i = b.size(); i < a.size(); i++) {
                merges.add(a.get(i));
            }
        }
        else {
            return merges;
        }
        return merges;
    }
}

1 个答案:

答案 0 :(得分:2)

你应该分别循环两个数组或循环小的oner的大小然后添加更大的其余的

第一个解决方案:

public static ArrayList<Integer> merges(ArrayList<Integer> a, ArrayList<Integer> b) {

    ArrayList<Integer> merges = new ArrayList<Integer>();
    for (int i = 0; i < a.size(); i++) {
        merges.add(a.get(i));
    }
    for (int i = 0; i < b.size(); i++) {
        merges.add(b.get(i));
    }

    return merges;
}

}

第二个解决方案:

        public static ArrayList<Integer> merges(ArrayList<Integer> a, ArrayList<Integer> b) {
  ArrayList<Integer> merges = new ArrayList<Integer>();
  if(a.size()<b.size()){
    int i=0;
    while(i<a.size()){
      merges.add(a.get(i++));
      merges.add(b.get(i++));
    }
    while(i<b.size()){
      merges.add(b.get(i++));
    }
  }else{
    int i=0;
    while(i<b.size()){
      merges.add(a.get(i++));
      merges.add(b.get(i++));
    }
    while(i<a.size()){
      merges.add(a.get(i++));
    }
  }
  return merges;
}

或者只是你可以使用java.util.ArrayList.addAll(Collection c)方法