恬然自得.活在當下: [功課] 使用LinkedList集合存儲25個…..修改版

2011年4月14日 星期四

[功課] 使用LinkedList集合存儲25個…..修改版

真不好意思ˊ﹏ˋ,後來有人問過老師之後,才知道老師的本意,似乎也希望隨機的數字不要重複,而且還需要排序的樣子,所以特地打了一下修正版的程式碼@@"可能有緣人才看得到我這篇文章了,也許大家交完功課後就不光顧網誌了吧(?)

好吧,進入正題,原本隨機數字不重複,我自己有兩種作法,不過第二種作法感覺跟老師的本意不太切合,所以就提供大家最常見的寫法吧;另外今天在研究室也發現同學們的作法還滿有趣的,所以也特地寫出來供參考。

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迴圈改成whilewhile改成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);

沒有留言:

張貼留言

歡迎提供良性建議^_^