Страницы

Поиск по вопросам

воскресенье, 29 декабря 2019 г.

Случайное число без Random

#java #случайные_числа


Как в языке Java получить случайное число в диапазоне ? ( Без Math.random())
    


Ответы

Ответ 1



Алгоритм на основе текущего времени: long rangeBegin = 0L; long rangeEnd = 100L; long currentTime = System.currentTimeMillis(); long randomNumber = rangeBegin + currentTime % (rangeEnd - rangeBegin);

Ответ 2



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

Ответ 3



Если не хотите использовать java.util.Random напишите свой генератор псевдослучайных чисел. Это не так уж и сложно 😉 Немного модифицированный пример из gnu реализации стандартной библиотеки java public static int next(long seed) { int bits = 32; seed = (seed * 0x5DEECE66DL + 0xBL) & ((1L << 48) - 1); return (int) (seed >>> (48 - bits)); } Добавлю еще пару безумных примеров: public static int next() { List array = Arrays.asList(0, 1, 2, 3, 4, 5, 6, 7, 8, 9); Collections.shuffle(array); return array.get(0); } Или вот так: public static int next() throws Exception { final AudioFormat format = new AudioFormat(8_000, 8, 2, true, true); final DataLine.Info info = new DataLine.Info(TargetDataLine.class, format); final TargetDataLine line = (TargetDataLine) AudioSystem.getLine(info); line.open(format); line.start(); int bufferSize = (int) format.getSampleRate() * format.getFrameSize(); byte buffer[] = new byte[bufferSize]; int result = 0; try (ByteArrayOutputStream out = new ByteArrayOutputStream()) { int count = line.read(buffer, 0, buffer.length); if (count > 0) { out.write(buffer, 0, count); for (byte b : buffer) { result += b; } } } return result; } Чтобы последний пример работал, нужно иметь микрофон и шуметь во время работы метода)

Ответ 4



new Random().ints(min,(max+1)).findFirst().getAsInt();

Комментариев нет:

Отправить комментарий