2012-03-06 81 views
0

我有一個簡單的問題。我嘗試從容器RandomList中獲取隨機值。它可以和String和int一起工作,但是不能和double一起工作,以及如何解決它?隨機雙列表不顯示隨機變量

謝謝

import java.util.*; 



public class RandomList<T> { 

    private ArrayList<T> storage = new ArrayList<T>(); 

    private Random rand = new Random(47); 

    public void add(T item) { storage.add(item); } 

    public T select() { 

    return storage.get(rand.nextInt(storage.size())); 

    } 

    public static void main(String[] args) { 

    RandomList<String> rs = new RandomList<String>(); 
    RandomList<Integer> rs1 = new RandomList<Integer>(); 
    RandomList<Double> rs2 = new RandomList<Double>(); 
    double w = 1.23; 

    for(String s: ("The quick brown fox jumped over " + 

     "the lazy brown dog").split(" ")) 

     rs.add(s); 

    for(int i = 0; i < 11; i++) 

     System.out.print(rs.select() + " "); 

    for (int i = 0; i < 5; i++) 
     rs1.add(i); 
    for (int i = 0; i < 5; i++) 
     System.out.print(rs1.select() + " "); 

    for (int i = 0; i < 5; i++) 
     w = (double)i/5; 
     rs2.add(w); 
    for (int i = 0; i < 5; i++) 
     System.out.print(rs2.select() + " "); 

    } 

} 

輸出超狐快速快速狗棕色棕色懶棕色3 0 3 1 1 0.8 0.8 0.8 0.8 0.8棕色,所以它適用於字符串和INT,但不會對雙倍(每次相同的值)。

回答

5

您在for循環中沒有任何大括號,因爲它添加了一堆雙精度,所以它不執行兩個縮進的語句。因此,您只需添加一個數字,而不是五個。嘗試添加缺失的大括號,看看是否能解決問題。

爲了將來的參考,如果你已經在for循環中聲明瞭w作爲局部變量,這甚至不會編譯,因爲將w添加到隨機列表的語句會引用一個變量超出範圍。因此,將變量範圍確定爲它們所需的位置可以幫助防止這樣的錯誤。

希望這會有所幫助!

2

只需在循環中添加數據到rs2的捲曲花括號。

for (int i = 0; i < 5; i++){ 
     w = (double)i/5; 
     rs2.add(w); 
}