java - 试图将两个数组组合成一个排序数组;当第一个数组小于第二个数组时,代码不起作用
问题描述
我正在尝试完成一项家庭作业,我的任务是在不使用 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);
}
}
我的代码在第一个数组大于第二个数组时有效,但当第一个数组小于第二个数组时出现错误。
我不确定为什么会发生这种情况,因此非常感谢任何朝着正确方向的指导或推动。
先感谢您。
解决方案
我认为你应该尝试使用更多的 elseif 语句而不是这么多的 if 语句。这是您可以将其更改为 elseif 语句而不是原始 if 语句的示例。
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++;
}
else 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++;
}
此外,还有一个与您的问题类似的问题:Java,均匀地合并两个数组 也许其中提到了更多功能,您可以将其用于将来参考。
推荐阅读
- c++ - C++ 获得“第二个命令行参数”
- sql - 我想按列显示列值组的总和。如何显示?
- visual-studio-code - Search selected text in all workspace files without having to hit the enter key to actually start the search?
- javafx - JavaFXML 创建新场景
- git - Yocto throws a git Fatal Error "Please tell me who you are" after after successful Bitbake build
- android - 当外部库中抛出异常时,Android Studio 挂起
- scala - 在 Sangria 中将多个延迟值组合成一个新的延迟类型,GraphQL 实现
- php - PHP - 为什么这个有效而另一个无效
- angular - 如何让 {{ab}} 以角度工作
- java - 设置文本编辑文本