Java Random генерация случайных слов

172
23 февраля 2018, 18:13

Добрый день! Занимаюсь по книге Эккеля и столкнулся с ниже представленным примером. Не могу понять, почему на выводе программа всегда выдает один и тот же результат? Если я правильно понял, то каждый раз символы должны генерироваться случайно. Заранее спасибо!

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
Answer 1

Причина здесь

private static Random rand = new Random(47);

На правой странице конструктор использует константное семя 47, что значит, что он всегда будет генерировать ту же самую последовательность случайных чисел.

Когда вы используете другое число вместо 47, вы получите другую последовательность, но опять всегда ту же самую.

Чтобы получить всегда новую и новую последовательность, нужно всегда задать новое семя - стандартный способ, как это сделать, есть использовать текущие бремя, например

private static Random rand = new Random(new Date().getTime());
READ ALSO
Онлайн хранение данных

Онлайн хранение данных

Ребят, посоветуйте как проще всего сделать хранение данных, точнее передачу между компами

133
Как получить готовый entity при выборке нескольких полей hibernate 5.2 java

Как получить готовый entity при выборке нескольких полей hibernate 5.2 java

Подскажите пожалуйста, как сделать что бы после выполнения запроса:

153
Разница между &#39;+&#39; и &#39;,&#39; в методе System.out.println();

Разница между '+' и ',' в методе System.out.println();

Часто замечал, что если я провожу какие-то математические операции с какой-то переменной, то вывести её с помощью

161