Я пытаюсь выполнить домашнее задание, в котором мне поручено объединить отсортированные массивы в один отсортированный массив без использования функции sort () или любого другого предопределенного метода.
У меня следующий код:
try {
// get input from a file
Scanner ourScanner = new Scanner(new File(fileName));
int numInArray1;
int numInArray2;
int [] array1 = null;
int [] array2 = null;
int [] array3 = null;
int indexArray1 = 0;
int indexArray2 = 0;
int indexArray3 = 0;
boolean run = true;
// keep looking for more input
while (ourScanner.hasNext()) {
numInArray1 = ourScanner.nextInt(); // first int will be number of elements in array
array1 = new int[numInArray1]; // create array1 with proper quantity of space allocated
for (int i = 0; i < numInArray1; i++) { // puts certain number of int into the array as indicated by numInArray1
array1[i] = ourScanner.nextInt();
}
numInArray2 = ourScanner.nextInt(); // next int after the integers put in the array will be number of elements in array2
array2 = new int[numInArray2]; // create array2 with proper quantity of space allocated
array3 = new int[numInArray1 + numInArray2]; // create final array for both lists merged, allocate appropriate amount of space
for (int j = 0; j < numInArray2; j++) { // puts certain number of int into the second array as indicated by numInArray2
array2[j] = ourScanner.nextInt();
}
//.out.println(Arrays.toString(array1));
//System.out.println(Arrays.toString(array2));
}
/*System.out.println(Arrays.toString(array1));
System.out.println(Arrays.toString(array2));*/
while (run == true) {
if (array1.length - indexArray1 == 1 && array2.length - indexArray2 == 1) {
run = false;
}
if (array1[indexArray1] < array2[indexArray2]) { // if element in array1 is smaller than in array2
array3[indexArray3] = array1[indexArray1];
System.out.print(array3[indexArray3] + " ");
indexArray1++;
indexArray3++;
}
if (array1[indexArray1] > array2[indexArray2]) { // if element in array1 is bigger than in array2
array3[indexArray3] = array2[indexArray2];
System.out.print(array3[indexArray3] + " ");
indexArray2++;
indexArray3++;
}
else if (array2[indexArray2] == array1[indexArray1]) { // if the two elements are the same
indexArray1++;
System.out.print(array3[indexArray3] + " ");
indexArray3++;
array3[indexArray3] = array2[indexArray2];
indexArray2++;
System.out.print(array3[indexArray3] + " ");
indexArray3++;
}
if (array2.length - indexArray2 == 0) {
int numLeft = array1.length - array2.length;
for (int j = array1.length - (numLeft + 1); j < array1.length; j++) {
System.out.print(array1[j] + " ");
}
run = false;
}
else if (array1.length - indexArray1 == 0) {
int numLeft = array2.length - array1.length;
for (int k = array2.length - (numLeft + 1); k < array2.length; k++) {
System.out.print(array2[k] + " ");
}
run = false;
}
}
}
catch (FileNotFoundException ex) {
System.out.println("File not Found");
System.exit(0);
}
}
Мой код работает, когда первый массив больше второго, но я получаю сообщение об ошибке, когда первый массив меньше второго.
Я не уверен, почему этопроисходит, поэтому любые указания или толчки в правильном направлении будут высоко оценены.
Заранее спасибо.