Web | Coding | Blog | SOHO

[Java]產生不重複之亂數

題目:產生5個不重複的1-10的數字

解:

一開始宣告一個陣列空間為10的 num變數,
並透過for 迴圈製作1-10的數字。

int[] num = new int[10];
        System.out.print("數字: ");

        for(int i = 0; i < num.length; i++)
        {
           num[i] = i + 1;
           System.out.print(num[i]+" ");
        }

再來寫一個製作亂數的程式:

宣告一個陣列 arr 空間為5,arr陣列用途為放置亂數。

int[] arr = new int[5];

首先使用亂數製作0-9的數字n,並放入num陣列;

假設亂數產生出 n=2 ,那麼 num[2] = 3
(num[0]=1, num[1]=2, num[2]=3, …, num[9]=10)

再來將 num[2] 放入 arr[0]
num: [0]  [1]  [2]  [3]  [4]  ….     . . . .  [ 8 ]  [ 9 ]
值     :| 1 | 2 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 10 |
arr:[0]  [1]  [2]  [3]  [4]
值 :| 3 | 0 | 0 | 0 | 0 |
陣列不會因為取代了前方的值,本值就消失;所以最後方[9]=10

n = (int)(Math.random()*(10-i));
            arr[i] = num[n];

剛剛是透過亂數產生0-9,現在變成產生0-8;目的是不去取用到num[9]

for(int j = n; j < num.length - 1; j++)
            {
                num[j] = num[j+1];
            }

繼續剛剛的假設,如果產生出 n = 8 那麼 num[ 8 ]=10;
再把 num[ 8 ]=10 放到 arr[1] (此為第二個亂數)。

num: [0]  [1]  [2]  [3]  [4]  ….     . . . .  [ 8 ]  [ 9 ]
值     :| 1 | 2 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 10 |
arr:[0]   [1]  [2]  [3]  [4]
值 :| 3 | 10 | 0 | 0 | 0 |


以此類推,再產生0-7、0-6、0-5 …

        int n;
        for(int i = 0; i < arr.length; i++)
        {
            n = (int)(Math.random()*(10-i));
            arr[i] = num[n];
            for(int j = n; j < num.length - 1; j++)
            {
                num[j] = num[j+1];
            }
        }
        return arr;
    }


完整程式碼如下:



public class Example
{
    public static void main(String[] args)
    {
        int[] num = new int[10];
        System.out.print("數字: ");

        for(int i = 0; i < num.length; i++)
        {
           num[i] = i + 1;
           System.out.print(num[i]+" ");
        }

        System.out.print("\n隨機不重複產生5個亂數: ");

        int[] Array;

        Array = getRandom(num);

        for(int i = 0; i < 5; i++)

           System.out.print(Array[i] + " ");
    }

    public static int[] getRandom(int[] num)
    {
        int[] arr = new int[5];
        int n;
        for(int i = 0; i < arr.length; i++)
        {
            n = (int)(Math.random()*(10-i));
            arr[i] = num[n];
            for(int j = n; j < num.length - 1; j++)
            {
                num[j] = num[j+1];
            }
        }
        return arr;
    }
}


另外可以試著練習,產生n個不重複的0-9的數字,n透過輸入的方式指定。



Java 學習日誌 (點此閱讀所有 Java日誌)


如果您喜歡本站的文章,也歡迎將文章分享轉貼並註明出處;
另外還未按讚粉絲專頁的朋友,也可以動動手點擊追蹤最新的文章唷:

Comments

comments

如果您喜歡本站的文章,也歡迎將文章分享轉貼並註明出處;另外還未按讚粉絲專頁的朋友,也可以動動手點擊追蹤最新的文章唷:


© 2017 4xCode™ | Design:SC 站長