繁体   English   中英

试图将两个数组组合成一个排序的数组; 第一个数组小于第二个数组时,代码不起作用

[英]Trying to combine two arrays into one sorted array; code does not work when first array is smaller than second array

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

当第一个数组大于第二个数组时,我的代码可以工作,但是当第一个数组小于第二个数组时,我得到一个错误。

我不确定为什么会这样,所以任何朝着正确方向的指导或推动都将不胜感激。

先感谢您。

我不确定,但我想你应该更新一下

if (array1[indexArray1] < array2[indexArray2]) {        
    array3[indexArray3] = array1[indexArray1];
    System.out.print(array3[indexArray3] + " ");
    indexArray1++;
    indexArray3++;

} else if (array1[indexArray1] > array2[indexArray2]) {  // Update hear. Use else if instead of else.
    array3[indexArray3] = array2[indexArray2];
    System.out.print(array3[indexArray3] + " ");
    indexArray2++;
    indexArray3++;
}

我已经运行了您的代码,但是逻辑可能有错误。 因此,我不确定这是否会对您有所帮助。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM