如果想要在程式之中隨機產一個數字該怎麼做呢?
此時就該 Random 登場囉!
教學影片
注意:影片有高畫質 720P 的選項,可以看得更清楚喔!
重點提示
1. 想要產生亂數的話,可以使用 C# 內建的 Random 物件
2. 建立出一個 Random 物件之後,就等同於有了一個亂數產生器
3. Random Class 的主要功能就是產生亂數,主要的 method 就是 Next( ),Next( ) 有三種版本:
(1) int Next( )
沒有參數的版本
產生的亂數介於 0 到整數最大值之間 (0~2147483647)
(2) int Next(int maxValue)
參數為上限
產生的亂數介於 0 到 maxValue 之間 (不含 maxValue)
(3) int Next(int minValue, int maxValue)
參數為下限與上限
產生的亂數介於 minValue 與 maxValue 之間 (含 minValue 但不含 maxValue)
補充
電腦沒有真亂數
這話怎麼說?
事實上,電腦產生亂數的方法,是經由一系列的數學計算出的結果。而這個計算過程之中,基本上是沒有隨機的成分存在,所以產生出來的結果就是固定的。
舉個簡單的例子,我們都知道 1 + 1 = 2,不會隨著我們在不同地方算而得到不同結果。電腦產生亂數的計算也是這樣,不會隨著情況不同而有不同的結果。如果我不想要得到 2,那我們就要改變相加的數字。
因此,Random Class 給了我們一個機會來得到不同的結果。在建立 Random Class 物件時,你可以給它一個 seed (種子),來加入亂數計算的過程,以擾亂亂數的結果。甚麼時候給?就是在你呼叫下面這行程式碼時候:
Random random = new Random();
這個 constructor 有另一個版本:Random random = new Random(int seed);
如果我們呼叫這個版本的 constructor ,那麼就會根據我們給定的 seed 來產生亂數。如果兩個 Random 物件的 seed 一樣,那們它們就會得到同一組亂數。(請嘗試看看練習)通常我們為了要避免每次執行程式的結果都相同,我們會在程式內把執行程式的時間當作 seed 丟給 Random。幸好,如果你呼叫了沒有參數的 new Random( ),那麼裡面就會自動取得現在時間做為 seed 來用了。這是為了避免以前大多數程式設計師在寫 C 語言的亂數時常犯的錯誤。
練習
把今天教學中,建立 Random 物件的程式碼換成下面這行
Random random = new Random(543);
然後多按幾次按鈕,有沒有發現甚麼呢?這就是所謂「電腦裡沒有真亂數」的意思
(詳情請參考補充)
相關資訊連結
MSDN - Random Class
http://msdn.microsoft.com/zh-tw/library/system.random%28v=vs.110%29.aspx
C#裡面的字好模糊@@
回覆刪除請問你有開啟 720p 的畫質嗎?
刪除小山老師 請問之後會有C#對database的部分或是對表單設計之類的嗎?
回覆刪除期待~
呵呵...因為我是自學這邊真的很不錯
很多概念都懂了
小山老師,這裡真的很不錯!~ 給你一個讚!!
回覆刪除感謝小山老師~~ 希望能有新的教學!!
回覆刪除小山老師:希望您能夠在出一部有關於RS-232傳送與接收的影片教學,例如我有1顆IC持續的透過RS-232傳送出一些數字,那我要如何寫C#來接收這個部分呢(例如透過1個BUTTON按下去之後就能夠接收),或是當我電腦丟個數字透過RS-232傳出去,然後透過我自己的TOOL來顯示數字,那傳送的部分要如何用C#來完成呢?盼小山老師能夠出有關於這部分的影片,感謝感謝。
回覆刪除我也想知道^0^
刪除老師 我想請問一下
回覆刪除如果亂數D,整數X,而8>X>6
是不是只能有 X = (int)(d*2)+6
這個做法
老師 我想請問
回覆刪除要如何取出數個不重複的亂數??
請問一下如何用按鈕來比大小1~14不可以有7
回覆刪除亂數範圍如果是0~(2^63)-1 = 0~92233....775807
回覆刪除如果直接用%來做限制範圍 可能會有機率些微不平等的狀況
比如%10的話0~7的機率多一次的可能性
雖然非常非常小 但有強迫症的用了不舒服 哈哈
作者已經移除這則留言。
回覆刪除