簡體   English   中英

如何將隨機數插入數組並對其進行排序

[英]How to insert random numbers into an array and sort them

我的代碼應該采用隨機方法中生成的隨機數並對它們進行排序,但它只給了我一個數字。

我的程序是一個隨機數生成器,它應該生成 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]);
        }
    }
}

您需要將程序分解為單獨的步驟:

  1. 將所有隨機數插入數組
  2. 對數組進行排序
  3. 打印數組的內容

我注意到的幾個問題:

  1. 由於您要從 1 到 10 生成 1000 個數字,因此maxmin的值應分別為 10 和 1。
  2. 應該在開始插入值之前聲明array 它還應該具有 1000 的固定大小。
  3. 您的冒泡排序算法也有一些錯誤導致不正確的 output。 如果您希望將數組從最大到最小排序,只需將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));
}

您的代碼將導致 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,所以當數組 [1] 將拋出索引異常時。所以最外層循環只會運行一次然后拋出異常。

:D

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM