如何将随机数插入数组并对其进行排序

问题描述 投票:-1回答:2

我的代码应该采用在random方法中生成的随机数并对它们进行排序,但是只给我一个数字。

我的程序是一个随机数生成器,应该生成1000个可以排序的数字,但是我的代码仅将一个数字插入数组。

public static void main(String[] args) {
    // write

    int max = 1000;
    int min=0;
    int range = max - min + 1;

    // generate random numbers within 1 to 10
    for (int i = 0; i < 1000; i++) {
        int rand = (int) (Math.random () * range) + min;
        System.out.println ( rand );




        int array[] = {rand};
        int size = array.length;

        for ( i = 0; i < size - 1; i++) {
            int min1 = i;

            for (int j = i + 1; j < size; j++) {
                if (array[j] < array[min1]) {
                    min = j;
                }
            }
            int temp = array[min1];
            array[min1] = array[i];
            array[i] = temp;
        }

        for (int k = 0; k < size; i++) {
            System.out.print(" " + array[i]);
        }
    }
}
java arrays sorting random
2个回答
1
投票

您需要将程序分成单独的步骤:

  1. 将所有随机数插入数组
  2. 排序数组
  3. 打印数组的内容

我注意到的几个问题:

  1. 由于要从1-10生成1000个数字,因此maxmin的值应分别为10和1。
  2. 开始插入值时,
  3. array应该声明为before。它的固定大小也应该为1000。
  4. 您的气泡排序算法也有一些错误,导致错误的输出。如果希望将数组从最小到最大排序,只需在>语句的条件下将<更改为if

我还决定使用Arrays.toString()打印数组而不是循环。

public static void main(String[] args) {
    int max = 10;
    int min = 1;
    int range = max - min + 1;
    int size = 1000;
    int[] array = new int[size];

    for (int i = 0; i < size; i++) {
        int rand = (int) (Math.random() * (range) + min);
        array[i] = rand;
    }

    int temp = 0;
    for (int i = 0; i < size; i++) {
        for (int j = 1; j < size - i; j++) {
            if (array[j - 1] > array[j]) {
                temp = array[j - 1];
                array[j - 1] = array[j];
                array[j] = temp;
            }
        }
    }
    System.out.println(Arrays.toString(array));
}

0
投票

您的代码将导致ArrayIndexOutException。以下是您代码中的代码更改,我不会做太多更改,因此您可以比较它们并发现错误,希望很好:D

 public static void main(String[] args) {

    int max = 1000;
    int min=0;
    int range = max - min + 1;


    int[] array = new int[range];
    // generate random numbers within 1 to 10
    for (int i = 0; i < 1000; i++) {
        int rand = (int) (Math.random () * range) + min;
        array[i] = rand;
    }

    int size = array.length;
    for (int i = 0; i < size; i++) {
        int min1 = i;

        for (int j = i + 1; j < size; j++) {
            if (array[j] < array[min1]) {
                min1 = j;//here min1
            }
        }
        int temp = array[min1];
        array[min1] = array[i];
        array[i] = temp;
    }

    for (int k = 0; k < size; k++) {
        System.out.print(" " + array[k]);
    }
}

让我更清楚地解释一下,在OP的代码中有一些问题,两个专业:一:

for ( i = 0; i < size - 1; i++) {
        int min1 = i;

        for (int j = i + 1; j < size; j++) {
            if (array[j] < array[min1]) {
                min = j;
            }
        }
        int temp = array[min1];
        array[min1] = array[i];
        array[i] = temp;
    }

将永远不会运行,因为数组大小为1,因此for循环短语将不运行而被忽略(意味着for(int i = 0; i <0; i ++){....})。

两个:

for (int k = 0; k < size; i++) {
        System.out.print(" " + array[i]);
    }

因为数组的大小为1,所以当array [1]会抛出索引异常。因此,最外面的循环只会运行一次,然后抛出异常。

:D

© www.soinside.com 2019 - 2024. All rights reserved.