当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;
}
}
答案 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)方法