RandomList с двойным не показывает случайных величин - PullRequest
0 голосов
/ 06 марта 2012

У меня простой вопрос.Я пытаюсь получить случайные значения из контейнера 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, поэтому он работает для string и int, но не для double (одно и то же значение каждый раз).

Ответы [ 2 ]

5 голосов
/ 06 марта 2012

У вас нет фигурных скобок вокруг цикла for, в который вы добавляете несколько значений типа double, поэтому он не выполняет оба оператора с отступом.В результате вы просто добавляете одну цифру, а не пять.Попробуйте добавить отсутствующие фигурные скобки и посмотрите, исправит ли это что-то.

Для дальнейшего использования, если бы вы объявили w в качестве локальной переменной внутри цикла for, это вообще не скомпилировалось бы, потому что оператор, который добавляетw к случайному списку ссылался бы на переменную, которая находится вне области видимости.Таким образом, определение области переменных там, где они нужны, может помочь предотвратить ошибки, подобные этой.

Надеюсь, это поможет!

2 голосов
/ 06 марта 2012

Просто добавьте фигурные скобки в цикле, которые добавляют данные в rs2.

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