昨天寫random的時候是看網路資料寫ㄉ
今天回去研究簡報上的code,還是好困惑ㄛ
先附上code
int seed = 123;
Random rand = new Random(seed);
int[] count = new int[10];
for (k = 0; k < 10; ++k)
{
count[k] = 0; //他有存在的必要嗎
}
const int N = 1000;
for (i = 0; i < N; ++i)
{
k = rand.Next() % 10; //%10到底是什麼
++count[k];
Console.WriteLine(count[k]);
}
部分來源:台大開放式課程
我大概從第2行之後就不知道他在幹嘛ㄌ
首先,他new了一個list
然後他用一個迴圈把list裡面的東西都變0
但有趣的是,當我把迴圈整個註解掉,重跑一次list裡面的東西仍然都是0
接下來是更令人困惑的下半部
首先他設定了一個int N,然後拿來當迴圈範圍,也完全沒有出現在迴圈內部
但神奇的是,修改那個N的大小除了按照預期修改生產出亂數的數量,他還會改變亂數的生成範圍?
後來我發現,無論是否使用seed,亂數的生成都會由小到大排列。
使用seed時,當修改N的數字而縮減範圍,留下的部分就剛好會在N的範圍裡
例如當N=10,留下的數字都會<10
我猜應該與%10有關?
最神奇的地方來了:
當我去掉%10,他就會報錯!
以我原先的認知,k = rand.Next() 這個東西應該是可以單獨運行的
因此目前猜測與++count[k]; 有關係
這一行的k可以換成數字,結果確實會變,不過還是不能很確定用途。
嗯沒綽 今天的文完全沒有營養,全是問題ouo