真不好意思ˊ﹏ˋ,後來有人問過老師之後,才知道老師的本意,似乎也希望隨機的數字不要重複,而且還需要排序的樣子,所以特地打了一下修正版的程式碼@@"可能有緣人才看得到我這篇文章了,也許大家交完功課後就不光顧網誌了吧(?)
好吧,進入正題,原本隨機數字不重複,我自己有兩種作法,不過第二種作法感覺跟老師的本意不太切合,所以就提供大家最常見的寫法吧;另外今天在研究室也發現同學們的作法還滿有趣的,所以也特地寫出來供參考。
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);
沒有留言:
張貼留言
歡迎提供良性建議^_^