看板 java 關於我們 聯絡資訊
※ 引述《ninteen (小美)》之銘言: : ※ 引述《janyfor (妳哪位ㄚ)》之銘言: : : 先將所有值放到陣列 : : 依序選亂數打亂陣列 : : 再取前6個值 : : 參考參考 : janyfor的方法是比較好的 : 運算複雜度比較低 : 不過所謂打亂陣列的地方可能要修改一下 : 以下我提供程式碼 : int Max = 46; //亂數的最大值 : int[] numbers = new int[Max]; : for (int i=0 ; i<Max ; i++) numbers[i]=i;//陣列初始化 : int n = 6; //你需要的亂數個數 : int pick, temp; : for(int i=0 ; i<n ; i++){ : pick = (int)(Math.random()*(Max-i) + i);//重點在這裡 : //Swapping : temp = numbers[pick]; : numbers[pick] = numbers[i]; : numbers[i] = temp; : } : //Show出亂數 : for(int i=0 ; i<n ; i++) System.out.println(numbers[i]); 這個程式確實會出現0 如果不想出現0 把for (int i=0 ; i<Max ; i++) number[i]=i; 改成for (int i=0 ; i<Max ; i++) number[i]=i+1; 即可 至於Max-i這個地方是重點,不是我寫錯 基本精神是,取過的亂數不再取 也就是說 第一次取0~45,然後取出的亂數放到陣列的[0]的位置,一但放過去之後就不再動它 第二次取1~45,然後取出的亂數放到陣列的[1]的位置,一但放過去之後就不再動它 第三次取2~45,然後取出的亂數放到陣列的[2]的位置,一但放過去之後就不再動它 依此類推 希望這樣說明有清楚 原諒我不能畫圖很難說明 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 24.17.240.114 ※ 編輯: ninteen 來自: 24.17.240.114 (12/11 04:09)
etman395:第一次是取0~45+1 第二次不是取0~44+1嗎?? 12/11 09:20
etman395:噗.打太快~= = 我了解那行的意思了 謝謝 12/11 09:31