true
またはfalse
をランダムに返すJavaメソッドを作成する必要があります。これどうやってするの?
クラス 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 */
}
(Math.random() < 0.5)
は、ランダムにtrueまたはfalseを返します
これはする必要があります:
public boolean randomBoolean(){
return Math.random() < 0.5;
}
次のコードとして行うことができます、
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());
}
}
}
これがお役に立てば幸いです、ありがとう。
これで取得できます:
return Math.random() < 0.5;
公平な結果を得るには、次を使用できます。
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
クラスは、CPUの内部クロックを使用します(私の知る限り)。同様に、ランダム性のソースとしてRAM情報を使用できます。Windowsタスクマネージャの[パフォーマンス]タブを開いて、物理メモリ-利用可能:常に変化します;ほとんどの場合、値は毎秒更新されますが、まれにのみ値が数秒間一定のままです。さらに頻繁に変化する他の値はシステムハンドルとスレッドですが、cmd
コマンドを使用して値を取得するため、この例では、ランダム性のソースとしてAvailable Physical Memoryを使用します。
_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());
}
}
}
_
ご覧のとおり、コア部分はRuntime.getRuntime().exec()
を使用してcmd systeminfo
コマンドを実行しています。
簡潔にするために、try-catchステートメントは省略しました。このプログラムを数回実行してもエラーは発生しませんでした-cmdコマンドの出力には常に「使用可能な物理メモリ」行があります。
考えられる欠点:
main()
functionには、while(true)
ループ内にThread.sleep()
がなく、それでも、出力は1秒に1回程度しかコンソールに出力されないことに注意してください。 。