gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 04:28:40 27 4
gpt4 key购买 nike

当 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/

27 4 0