Мне нужно создать метод Java для случайного возврата true
или false
. Как я могу это сделать?
Вернуть True или False Случайно
Ответ 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.
Возможные недостатки:
- Есть некоторая задержка в выполнении этой программы. Обратите внимание, что в функции
main()
внутри циклаwhile(true)
нетThread.sleep()
и тем не менее вывод выводится на консоль только примерно раз в секунду или около того. - Доступная память может быть постоянной для вновь открытого сеанса ОС - пожалуйста, проверьте. У меня запущено всего несколько программ, и значение меняется каждую секунду. Я предполагаю, что если вы запускаете эту программу в среде сервера, получение разных значений для каждого вызова не должно быть проблемой.