2012-03-06 84 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); 
}