数字列出数组

Numerically listing Arrays

所以我的代码有问题。这是我想要做的:让一个数组具有原始的一组数字(最多 10 个数字),然后将这些数字复制并粘贴到第二个数组中。然后,第二个区域以数字方式列出第一个数组中的那些数字(从最低数字到最高数字)。

问题是...我的第二个输出是从最低数字到最高数字的良好输出,但是与此同时,我得到一长串重复数字和大量如果我使用 -9000 输入停止我的代码,则为零。谁能告诉我问题是什么以及如何解决?顺便说一下,我不想使用 Array.sort() 选项对第二个数组进行排序。除了扫描仪,不导入任何东西:

public static void main(String[] args) {

    System.out.println("Input up to '10' numbers for current array: ");

    int[] array1 = new int[10];
    int i;

    Scanner scan = new Scanner(System.in);

    for (i = 0; i < 10; i++) {
        System.out.println("Input a number for " + (i + 1) + ": ");
        int input = scan.nextInt();
        if (input == -9000) {
            break;
        } else {
            array1[i] = input;
        }
    }

    System.out.println("\n" + "Original Array: ");

    for (int j = 0; j < i; j++) {

        System.out.println((j + 1) + ": " + array1[j]);
    }

    System.out.println("\n" + "Organized Array: ");

    int[] array2 = new int[i];
    for (i = 0; i < array1[i]; i++) {
        System.out.println(+array1[i]);

        for (int j = 0; j < i; j++) {

            int temp;
            boolean numerical = false;

            while (numerical == false) {
                numerical = true;

                for (i = 0; i < array1.length - 1; i++) {

                    if (array2[i] > array2[i + 1]) {
                        temp = array2[i + 1];
                        array2[i + 1] = array2[i];
                        array2[i] = temp;
                        numerical = false;
                    }
                }
            }

        }
        for (i = 0; i < array2.length; i++) {
            System.out.println(array2[i]);
        }
    }
}
  • 在您的 for 循环中,您将 i 限制设置为 array1[i] 值而不是数组长度,这肯定是错误的。
  • 你在外层大 'for' 循环的其他循环中重用相同的索引 i,因此 i 值将被内部循环弄乱
  • 您从未将 array1 的值复制到 array2

您有几个问题需要解决才能制作您的程序 运行:

您忘记将 array1 复制到 array2:

你认为来自排序的输出array2实际上来自排序过程。

int[] array2 = new int[i];
for (int j = 0; j < i; j++) {
    array2[j] = array1[j];
}

您将排序数组的输出放在进行排序的循环中:

检查花括号的层次,将输出循环移到排序循环之后

for (i = 0; i < array2.length; i++) {
    System.out.println(array2[i]);
}

你的排序算法有一个额外的循环:

有最外层的循环是没有意义的:你的冒泡排序算法没有它也能完美运行,所以你应该删除循环,并将其主体向上移动一层嵌套:

for (i = 0; i < array1[i]; i++) { // Remove the loop
    ... // <<== Keep the body
}

你的最内层循环错误地重用了 i:

用另一个变量替换循环变量i,例如m

for (int m = 0 ; m < array2.length - 1; m++) {
    if (array2[m] > array2[m + 1]) {
        temp = array2[m + 1];
        array2[m + 1] = array2[m];
        array2[m] = temp;
        numerical = false;
    }
}

Demo.