標題:
[C#]
<C# 製作取出不重覆的數字陣列>
[打印本頁]
作者:
Edwin
時間:
2010-9-30 23:02
標題:
<C# 製作取出不重覆的數字陣列>
本帖最後由 Edwin 於 2010-10-1 00:25 編輯
時間過得好快呀~轉眼間又幾個月過去了QQ最近寫的程式,
常常過幾天就忘了。趁著記憶猶新,趕緊來做個學習筆記好
了。
這次寫的其中一段程式是,將22個數字,亂數排列,並將它
存到一個陣列中。程式的目的是為了,每當我按下重新洗牌
按鈕後,都能重新產生一個裡面元素是由 0到21所組成的陣
列(各個數字不能重覆哦)。
======實作程式碼區======
// 首先我先宣告兩個陣列
// 0到21總共有22個元素,所以宣告陣列大小為22
int[] Num=new int[22];
int[] RndArr=new int[22];
Random rnd=new Random();
int temp;
// 宣告亂數物件 rnd
// 宣告一個 temp 變數
for(int k=0;k<=21;k++)
{
Num[k]=k;
}
// 將 Num 陣列設值 就是依序為0到21
// 重點來了 下一段
for(int j=0,x=22 ; j<=21 ; j++,x--)
{
temp=rnd.Next(x);
RndArr[j]=Num[temp];
Num[temp]=Num[x-1];
}
=========解釋區===========
最後生出來的陣列 RndArr ,裡面就是不重覆的0到
21的亂數了。它的原理是一個跑22次的迴圈,每次
依照變數 j 的值當成索引,將 RndArr 由RndArr[0]
到 RndArr[21] 依序設值。
而 rnd.Next(x) 它會產生一個0到 x-1 的整數亂數,
每一次它產生的亂數值我將它設給 temp 存放。然後
利用 temp 當成 Num 陣列的索引,取出 Num[temp]
的值,再設給 RndArr 陣列。(
注意哦! temp 是要給
Num 陣列的索引,不是要設給 RndArr 的值哦!
)
接著再把 Num[temp] 的值由目前 Num 陣列的最後
一個元素的值來代替。而下個迴圈,依照 x 每次減 1的
特性,所以 rnd.Next(x) 產生的亂數它的上限就會每次
減一。因為 Num[temp]=Num[x-1] 的關係,就使得被
選中設到 RndArr 陣列中的數字在之後的迴圈都不會被選
到了,意思就好像 目前 Num 陣列裡索引為 temp 的值
被選到了,就把目前 Num 陣列裡,索引為 temp 的值,
由目前 Num 陣列裡最後一個元素的值來取代。也就是說一
但被選中了,那麼 Num 陣列裡就沒那個值啦。
沒想到短短幾行程式而已解釋要打這麼多字@@,我的目
的只是,難得我現在稍微有點想通了,希望別太快忘記。
所以做個筆記。
但還是希望對大家有用啦~~
歡迎光臨 資訊家電班NO7 (http://imce07.freehostia.com/forums/)
Powered by Discuz! 7.2