真不好意思ˊ﹏ˋ,後來有人問過老師之後,才知道老師的本意,似乎也希望隨機的數字不要重複,而且還需要排序的樣子,所以特地打了一下修正版的程式碼@@"可能有緣人才看得到我這篇文章了,也許大家交完功課後就不光顧網誌了吧(?)
好吧,進入正題,原本隨機數字不重複,我自己有兩種作法,不過第二種作法感覺跟老師的本意不太切合,所以就提供大家最常見的寫法吧;另外今天在研究室也發現同學們的作法還滿有趣的,所以也特地寫出來供參考。
1.其實最常見的作法,應該就是每次隨機產生數字後,就去跟之前產生的數字做比對,如果有重複就再重新產生一次,沒有重複的話就加入集合中;通常一個迴圈和一個條件式就解決了。
2.另一種是參考同學的想法,不過我還未問過原創者的想法,如果原創不希望貼出來的話,我會趕緊刪掉@"@但可能得等到明天才能問了。簡單說就是利用Set集合不能裝重複的數值特性,將重複的可能排除,待數字產生完後再放入LinkedList集合,這也算是善用集合的例子吧?
貼上執行結果:
隨機產生25個亂數:
[1, 6, 7, 10, 12, 13, 19, 24, 28, 29, 32, 34, 40, 41, 44, 51, 66, 72, 78, 84, 86, 87, 88, 94, 100]
並計算其總和跟平均如下:
總合為:1146.0
平均為:45.84
寫法僅供參考,畢竟Java才學不到一年0.0
(大家記得註解和程式碼要自己重新打過唷,工讀生會檢查;比方說將for迴圈改成while,while改成for,另外變數名稱和註解內容也修改掉)
程式碼如下:
import java.util.Collections; import java.util.HashSet; import java.util.LinkedList; import java.util.List; public class s11967046 { public static void main(String[] args) { /* 請使用LinkedList集合寫出一個程式, * 可隨機產生0到100之間的25個數字, * 並將它們排序為一個鏈結串列。 * 程式中計算出這些元素的總和, * 以及這些元素的浮點平均數。 */ List <Integer> list = new LinkedList <Integer> (); double sum = 0,avg; int counter = 1; //計數器 while(counter <= 25){ int ran = (int) (Math.random()*101); //確認list中是否已經有重複的元素了 //有的話就呼叫迴圈再來一次 if(list.contains(ran)){ continue; }else{ //如果沒有重複的元素就加入list list.add(ran); //並且將計數器+1 counter ++; } } for (int i :list){ //計算總合 sum += i; } //計算平均 avg = sum / 25; //題目可能有要求要排序? Collections.sort(list); System.out.println("隨機產生25個亂數:"); System.out.println(list); System.out.println("並計算其總和跟平均如下:"); System.out.println("總合為:" + sum); System.out.println("平均為:" + avg); } }
方法二:
//利用Set的特性來事先排除掉重複的元素 //之後再將Set元素轉存到List中 HashSet<Integer> sets = new HashSet<Integer>(); while(sets.size()<25){ //產生0~100的亂數25個 int ran = (int) (Math.random()*101); sets.add(ran); } list.addAll(sets);
沒有留言:
張貼留言
歡迎提供良性建議^_^