Возвратите TRUE или FALSE случайным образом

Я должен создать метод Java для возврата true или false случайным образом. Как я могу сделать это?

61
задан 17 March 2017 в 06:13

2 ответа

Можно использовать следующее для несмещенного результата:

Random random = new Random();
//For 50% chance of true
boolean chance50oftrue = (random.nextInt(2) == 0) ? true : false;

Примечание: random.nextInt (2) средства, что номер 2 является связанным. подсчет запускается в 0. Таким образом, у нас есть 2 возможных числа (0 и 1), и следовательно вероятность составляет 50%!

, Если Вы хотите дать больше вероятности своему результату, чтобы быть верными (или ложь) можно скорректировать вышеупомянутое как после!

Random random = new Random();

//For 50% chance of true
boolean chance50oftrue = (random.nextInt(2) == 0) ? true : false;

//For 25% chance of true
boolean chance25oftrue = (random.nextInt(4) == 0) ? true : false;

//For 40% chance of true
boolean chance40oftrue = (random.nextInt(5) < 2) ? true : false;
0
ответ дан 31 October 2019 в 14:55

Java Random класс использует внутренние часы ЦП (насколько я знаю). Точно так же можно использовать информацию о RAM в качестве источника случайности. Просто откройте Windows Task Manager, вкладку Performance, и смотрите на Физическую память - Доступный: это изменяется непрерывно; большую часть времени, обновления значения о каждой секунде, только в редких случаях значение остается постоянным в течение нескольких секунд. Другие значения, которые изменяются еще чаще, являются Системными Дескрипторами и Потоками , но я не нашел эти cmd команда получать их значение. Таким образом в этом примере я буду использовать Доступная Физическая память как источник случайности.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {

    public String getAvailablePhysicalMemoryAsString() throws IOException
    {
        Process p = Runtime.getRuntime().exec("cmd /C systeminfo | find \"Available Physical Memory\"");
        BufferedReader in = 
                new BufferedReader(new InputStreamReader(p.getInputStream()));
        return in.readLine();
    }

    public int getAvailablePhysicalMemoryValue() throws IOException
    {
        String text = getAvailablePhysicalMemoryAsString();
        int begin = text.indexOf(":")+1;
        int end = text.lastIndexOf("MB");
        String value = text.substring(begin, end).trim();

        int intValue = Integer.parseInt(value);
        System.out.println("available physical memory in MB = "+intValue);
        return intValue;
    }

    public boolean getRandomBoolean() throws IOException
    {
        int randomInt = getAvailablePhysicalMemoryValue();
        return (randomInt%2==1);
    }


    public static void main(String args[]) throws IOException
    {       
        Main m = new Main();
        while(true)
        {
            System.out.println(m.getRandomBoolean());
        }
    }
}

, Как Вы видите, базовая часть выполняет команду cmd systeminfo, с Runtime.getRuntime().exec().

Ради краткости, я опустил операторы выгоды попытки. Я несколько раз запускал эту программу, и никакая ошибка не произошла - всегда существует 'Доступная Физическая память' строка в выводе команды cmd.

Возможные недостатки:

  1. существует некоторая задержка выполнения этой программы. Заметьте, что в эти main() функция, в while(true) цикл, нет никакого Thread.sleep() и тем не менее, вывод печатается к консоли только об однажды секунде или около этого.
  2. доступная память могла бы быть постоянной для, недавно открыл сессию OS - проверьте. У меня есть только несколько выполнений программ, и значение изменяется о каждой секунде. Я предполагаю, запускаете ли Вы эту программу в Серверной среде, получение другого значения для каждого вызова не должно быть проблемой.
0
ответ дан 31 October 2019 в 14:55

Другие вопросы по тегам:

Похожие вопросы: