数字列出数组

时间:2015-03-11 18:43:00

标签: java arrays numerical

所以我的代码出了问题。这就是我想要做的:让一个数组具有原始数字集(最多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]);
        }
    }
}

2 个答案:

答案 0 :(得分:1)

您需要修复几个问题才能运行程序:

您忘记将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]);
}

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

拥有最外层的循环是没有意义的:你的bubblesort算法在没有它的情况下工作得很好,所以你应该删除循环,并将它的主体向上移动一层嵌套:

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.

答案 1 :(得分:0)

  • 在你的for循环中你设置我限制array1 [i]值不是数组长度,肯定是错误的。
  • 你正在重复使用相同的索引i,在外部大的其他循环中,用于&#39;循环,所以i值将被内循环弄乱
  • 您从未将array1值复制到array2