Java 当一个数组列表大于另一个数组列表时,尝试通过交错合并两个数组列表会引发IndexOutOfBoundsException
当ArrayList a大于b时,下面的代码会因IndexOutOfBoundsException而崩溃,但当ArrayList a的大小等于b或b的大小大于b时,下面的代码会正常工作Java 当一个数组列表大于另一个数组列表时,尝试通过交错合并两个数组列表会引发IndexOutOfBoundsException,java,arraylist,Java,Arraylist,当ArrayList a大于b时,下面的代码会因IndexOutOfBoundsException而崩溃,但当ArrayList a的大小等于b或b的大小大于b时,下面的代码会正常工作 public class Q2 { /*this is the test for my code there has to be two arraylists */ public static void main(String[] args) { ArrayList<Int
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;
}
}
公共类Q2{
/*这是对我的代码的测试,必须有两个ArrayList*/
公共静态void main(字符串[]args){
ArrayList a=新的ArrayList();
a、 增加(2);
a、 增加(3);
a、 增加(7);
a、 增加(1);
a、 增加(10);
ArrayList b=新的ArrayList();
b、 增加(1);
b、 增加(2);
b、 增加(3);
b、 增加(9);
系统输出打印(合并(a、b));
}
公共静态ArrayList合并(ArrayList a、ArrayList b){
ArrayList merges=新建ArrayList();
对于(int i=0;ia.size()){
对于(int i=a.size();ib.size()){
对于(int i=b.size();i
您应该分别在两个阵列上循环,或者在较小的阵列上循环,然后添加较大阵列的其余部分
第一个解决方案:
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;
}
公共静态ArrayList合并(ArrayList a、ArrayList b){
ArrayList merges=新建ArrayList();
对于(int i=0;i
}
第二种解决方案:
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;
}
公共静态ArrayList合并(ArrayList a、ArrayList b){
ArrayList merges=新建ArrayList();
如果(a.size(),则只需循环较小列表的大小,然后在较大列表中添加剩余的元素。当尝试循环较大列表时,在访问较小列表中不存在的索引时,会出现nullpointer异常。