RandomList with double不显示随机变量

are*_*tai 0 java random data-structures

我有一个简单的问题.我尝试从容器RandomList中获取随机值.它适用于String和int,但不能解决双重错误以及如何修复它?

谢谢

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() + " ");

  }

}
Run Code Online (Sandbox Code Playgroud)

输出是棕色的狐狸快速快速狗棕色棕色懒棕色3 0 3 1 1 0.8 0.8 0.8 0.8 0.8,所以它适用于字符串和int,但不适用于double(每次都相同的值).

tem*_*def 5

你在for循环中没有任何花括号,你添加了一堆双精度数,所以它不执行两个缩进语句.因此,您只需添加一个数字,而不是五个.尝试添加缺少的大括号,看看是否能解决问题.

为了将来的参考,如果你在for循环中声明了w作为局部变量,那么根本就没有编译,因为向随机列表添加w的语句将引用一个超出范围的变量.将变量范围限定在他们需要的位置可以帮助防止这样的错误.

希望这可以帮助!