台灣最大程式設計社群網站
線上人數
1053
 
會員總數:245475
討論主題:189234
歡迎您免費加入會員
討論區列表 >> Java >> 亂數產生不重複問題
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
亂數產生不重複問題
價值 : 10 QP  點閱數:3736 回應數:5

樓主

katokawa
門外漢
0 1
17 1
發送站內信



import java.util.*;
public class RandomMath{
public static void main(String[] args){
System.out.println("請輸入數字");
int n = 10;
for (int i=0;i<n;i++){
int num = (int)(Math.random()*9)+(1);
System.out.println(num);
}
}
}


目前在寫一提很老的題目 但爬了文還是不太懂我的Code要怎麼改不重複
產生N個不重複的亂數(亂數值的範圍必需介於1到N之間),N值可在程式內給定即可
如:n等於5時,即產生1,2,3,4 5的結果 順序是亂數
在程式碼中,不可以使用類別庫裡的功能,例如:contains, indexOf, replace...等等

並希望最好能以1個迴圈解決 當然2個迴圈也可以 其實我爬了很多文章還是不知道怎麼下手(頭緒0..) 不是用陣列就是方法差很多
不知如何修改 我的理解能力其實很差..

搜尋相關Tags的文章: [ java ] , [ 亂數不重複 ] ,
本篇文章發表於2016-03-28 11:06
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
1樓
不錯的參考

香帥
檢舉此回應
請參考
http://www.blueshop.com.tw/board/FUM20041006152546UBK/BRD20150427140333TDV.html
我寫的程式碼去修改。
本篇文章回覆於2016-03-28 11:24
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
作者回應

katokawa
檢舉此回應
其實我不太能理解耶 不好意思..
本篇文章回覆於2016-03-28 11:49
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
不錯的參考

浩瀚星空
捐贈 VP 給 浩瀚星空 檢舉此回應
現這種模式的。一般我會給你一個觀念。

一般我會將值給與陣列排放
然後隨機取得後,刪除該元素。確保不會在取得。

可惜的是java的array並沒有單純移除的功能。
一般是搭配arraylist來處理的。(因為這個就有移除單一元素的功能)

但山不轉路轉。無法刪除就重建吧。

一般會比較建議你用arraylist來處理
本篇文章回覆於2016-03-28 16:12
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
不錯的參考

budo
捐贈 VP 給 budo 檢舉此回應
建立一個二維陣列,第一列放 1~N 的數字。第二列預設值全部都設為 0,代表都還沒被抽到過。

然後,隨機抽取,抽到第二列相對欄位是 0 的,表示沒被抽到過,可用,然後把那個欄位設為 1,表示用過了;
抽到第二列相對欄位已經是 1 的,就代表是之前已經取用過的,不能用,繼續亂數選下一個。
本篇文章回覆於2016-03-28 19:10
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
最有價值解答

Raymond
檢舉此回應
幾乎所有的「亂數不重複」都可以用「洗牌法」來做.
1. 用陣列來存放想要出現的所有數值, 這時陣列裡的數值是有序的, 就像一副新的牌. 這已保證「不重複」了.


2. 順序的從第一個元素開始, 把它的內容跟另一個隨機選出位置的元素交換, 這就是「洗牌」的動作.


3. 最後, 你需要多少個「不重複的亂數」, 就直接打出陣列前 N 個的內容.
for (int n = 0; n < N; ++n) {
System.out.print(data[n] + " ");
}


本篇文章回覆於2016-03-28 20:53
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.