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