Reputation: 1
The below code crashes with IndexOutOfBoundsException
when ArrayList a is larger than b but it works just fine when they are equal in size or b is bigger
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;
}
}
Upvotes: 0
Views: 62
Reputation: 1435
you should loop over the two arrays separately or loop on the size of the smaller oner then add the rest of the larger one
First Solution:
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;
}
}
Second Solution:
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;
}
or simply you can use java.util.ArrayList.addAll(Collection c) method
Upvotes: 2