Подтвердить что ты не робот

Вернуть True или False Случайно

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

4b9b3361

Ответ 1

Класс java.util.Random уже имеет эту функциональность:

public boolean getRandomBoolean() {
    Random random = new Random();
    return random.nextBoolean();
}

Однако не всегда полезно создавать новый экземпляр Random каждый раз, когда вам нужно случайное логическое значение. Вместо этого создайте в своем классе атрибут типа Random, для которого требуется случайное логическое значение, а затем используйте этот экземпляр для каждого нового случайного булева:

public class YourClass {

    /* Oher stuff here */

    private Random random;

    public YourClass() {
        // ...
        random = new Random();
    }

    public boolean getRandomBoolean() {
        return random.nextBoolean();
    }

    /* More stuff here */

}

Ответ 2

(Math.random() < 0.5) возвращает true или false случайным образом

Ответ 3

Это должно сделать:

public boolean randomBoolean(){
    return Math.random() < 0.5;
}

Ответ 4

Вы можете сделать следующий код:

public class RandomBoolean {
    Random random = new Random();
    public boolean getBoolean() {
        return random.nextBoolean();
    }
    public static void main(String[] args) {
        RandomBoolean randomBoolean = new RandomBoolean();
        for (int i = 0; i < 10; i++) {
            System.out.println(randomBoolean.getBoolean());
        }
    }
}

Надеюсь, это поможет вам, спасибо.

Ответ 5

Вы получите следующее:

return Math.random() < 0.5;

Ответ 6

Вы можете использовать следующее для объективного результата:

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;

Ответ 7

Класс Java Random использует внутренние часы процессора (насколько я знаю). Точно так же можно использовать информацию ОЗУ как источник случайности. Просто откройте диспетчер задач Windows, вкладку "Производительность" и посмотрите на физическую память - доступно: она постоянно меняется; в большинстве случаев значение обновляется примерно каждую секунду, только в редких случаях значение остается постоянным в течение нескольких секунд. Другие значения, которые меняются все чаще, это системные дескрипторы и потоки, но я не нашел команду 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());
        }
    }
}

Как вы можете видеть, основная часть работает ЦМД systeminfo команды, с Runtime.getRuntime().exec().

Для краткости я пропустил операторы try-catch. Я запускал эту программу несколько раз, и никаких ошибок не возникало - всегда есть строка "Доступная физическая память" в выходных данных команды cmd.

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

  1. Есть некоторая задержка в выполнении этой программы. Обратите внимание, что в функции main() внутри цикла while(true) нет Thread.sleep() и тем не менее вывод выводится на консоль только примерно раз в секунду или около того.
  2. Доступная память может быть постоянной для вновь открытого сеанса ОС - пожалуйста, проверьте. У меня запущено всего несколько программ, и значение меняется каждую секунду. Я предполагаю, что если вы запускаете эту программу в среде сервера, получение разных значений для каждого вызова не должно быть проблемой.