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

标签 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;
    }
}

最佳答案

您应该分别循环两个数组,或者循环较小的一个数组的大小,然后添加较大数组的其余部分

第一个解决方案:

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) 方法

关于java - 当一个大于另一个时,尝试通过交错合并两个 ArrayList 会抛出 IndexOutOfBoundsException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31818967/

相关文章:

java - 对象数组列表 - 最小值

java - 声明一个 ArrayList

java - _jspInit 中的 NullPointerException

java.lang.RuntimeException : writeValueXml: unable to write value 错误

java - 如何打印不带括号([)和逗号(,)的arraylist值以及java中新行中的每个值?

java - 将值添加到类型为 class 的 ArrayList 元素

java - for循环条件可以在循环中改变吗?

java - 使用 Java 和 Kafka 的 Apache Spark Streaming

java - 不覆盖接口(interface)默认实现时编译失败

java - 将缓冲区写入 Java channel : Thread-safe or not?