首页 > 解决方案 > 试图将两个数组组合成一个排序数组;当第一个数组小于第二个数组时,代码不起作用

问题描述

我正在尝试完成一项家庭作业,我的任务是在不使用 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);
    }
}

我的代码在第一个数组大于第二个数组时有效,但当第一个数组小于第二个数组时出现错误。

我不确定为什么会发生这种情况,因此非常感谢任何朝着正确方向的指导或推动。

先感谢您。

标签: javaarrayssorting

解决方案


我认为你应该尝试使用更多的 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,均匀地合并两个数组 也许其中提到了更多功能,您可以将其用于将来参考。


推荐阅读