Добрый день! Занимаюсь по книге Эккеля и столкнулся с ниже представленным примером. Не могу понять, почему на выводе программа всегда выдает один и тот же результат? Если я правильно понял, то каждый раз символы должны генерироваться случайно. Заранее спасибо!
import java.nio.*;
import java.util.*;
public class RandomWords implements Readable {
private static Random rand = new Random(47);
private static final char[] capitals =
"ABCDEFGHIJKLMNOPQRSTUVWXYZ".toCharArray();
private static final char[] lowers =
"abcdefghijklmnopqrstuvwxyz".toCharArray();
private static final char[] vowels =
"aeiou".toCharArray();
private int count;
public RandomWords(int count) { this.count = count; }
public int read(CharBuffer cb) {
if(count-- == 0)
return -1;
cb.append(capitals[rand.nextInt(capitals.length)]);
for(int i = 0; i<4; i++) {
cb.append(capitals[rand.nextInt(vowels.length)]);
cb.append(capitals[rand.nextInt(lowers.length)]);
}
cb.append(" ");
return 10;
}
public static void main(String[] args) {
Scanner s = new Scanner(new RandomWords(10));
while(s.hasNext())
System.out.println(s.next());
}
} /* Output :
YAZBREYAC
FDWBNECDR
GDEAZCMDM
RAEEUACCO
NEOADBSCW
HAGBACKEX
REQCCCBEI
NEMASBTCH
KEUEUDZDG
WAQCZBYDY
Причина здесь
private static Random rand = new Random(47);
На правой странице конструктор использует константное семя 47, что значит, что он всегда будет генерировать ту же самую последовательность случайных чисел.
Когда вы используете другое число вместо 47, вы получите другую последовательность, но опять всегда ту же самую.
Чтобы получить всегда новую и новую последовательность, нужно всегда задать новое семя - стандартный способ, как это сделать, есть использовать текущие бремя, например
private static Random rand = new Random(new Date().getTime());
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости