Я пытался выполнить это упражнение почти три часа и до сих пор не понимаю, что я делаю неправильно.Я должен взять два ArrayList с номерами и объединить их в один, но вот подвох, они должны быть отсортированы следующим образом:
Если у массива "A" есть числа [1, 2, 3] и arraylist "B "имеет [9, 8, 7, 6, 5], тогда ArrayList" merge "должен быть [1, 9, 2, 8, 3, 7, 6, 5].
Т.е. он должен чередовать числа из введенных массивов A и B. Если один массив длиннее, он должен просто продолжать заполняться числами (как в этом случае с [7,6,5]. ТакжеМы не знаем длины ни одного из массивов.
Вот одно решение, которое, я думаю, должно работать хорошо, но я не могу заставить его работать. Вся помощь чрезвычайно ценится! *
import java.util.ArrayList;
import java.util.Scanner;
public class test19 {
public static void main(String[] args) {
ArrayList<Integer> arrayListA = new ArrayList<>();
ArrayList<Integer> arrayListB = new ArrayList<>();
Scanner sc = new Scanner(System.in);
while(true) {
System.out.println("Write a number to place in ArrayList A, quit with '-1'");
int Local = sc.nextInt();
if(Local > 0) {
arrayListA.add(Local);
} else {
break;
}
}
System.out.println();
System.out.println();
while(true) {
System.out.println("Write a number to place in ArrayList B, quit with '-1'");
int Local = sc.nextInt();
if(Local > 0) {
arrayListB.add(Local);
} else {
break;
}
}
System.out.println(merge(arrayListB, arrayListA));
}
public static ArrayList<Integer> merge(ArrayList<Integer> a, ArrayList<Integer> b) {
ArrayList<Integer> merge = new ArrayList<>();
if(a.size() < b.size()) {
//here we check which list is the smallest and use that one (so we don't try to add blankspaces from the longer list to the merge list)
for(int i = 0; i <= a.size(); i++) {
merge.add(a.get(i));
merge.add(b.get(i));
}
for(int j = a.size(); j <= b.size(); j++) {
merge.add(b.get(j)); //here we add the leftover numbers to the list
}
} else { //this means that list A is bigger than list B
for(int i = 0; i <= b.size(); i++) {
merge.add(a.get(i));
merge.add(b.get(i));
}
for(int j = b.size(); j <= a.size(); j++) {
merge.add(b.get(j));
}
}
return merge;
}
}