1. ホーム
  2. java

[解決済み] Javaでランダムなブーリアンを取得する

2022-02-12 06:37:37

質問

さて、このSOの質問を私のコードに実装してみました。 ランダムで真偽を返す

しかし、不思議な挙動があります。同時に10個のインスタンスを実行する必要があるのですが、どのインスタンスも1回の実行で1回だけ真か偽を返します。そして、驚くべきことに、私が何をしようとも、毎回、単に false

少なくとも50%程度の確率で true ?


もっとわかりやすくするために。私は自分のアプリケーションをJARファイルにビルドし、それをバッチコマンドで実行します。

 java -jar my-program.jar
 pause

プログラムの内容 - できるだけシンプルにすること。

public class myProgram{

    public static boolean getRandomBoolean() {
        return Math.random() < 0.5;
        // I tried another approaches here, still the same result
    }

    public static void main(String[] args) {
        System.out.println(getRandomBoolean());  
    }
}

10個のコマンドラインを開いて実行すると false という結果になります。

解決方法は?

を使うことをお勧めします。 Random.nextBoolean()

とはいうものの Math.random() < 0.5 も動作します。以下は私のマシンでの動作です。

$ cat myProgram.java 
public class myProgram{

   public static boolean getRandomBoolean() {
       return Math.random() < 0.5;
       //I tried another approaches here, still the same result
   }

   public static void main(String[] args) {
       System.out.println(getRandomBoolean());  
   }
}

$ javac myProgram.java
$ java myProgram ; java myProgram; java myProgram; java myProgram
true
false
false
true

があることは言うまでもありません。 無保証 毎回異なる値を得ることができます。しかし、あなたの場合、私は次のように考えています。

A) 自分が思っているようなコードで作業していない(間違ったファイルを編集しているなど)。

B) テスト時に異なる試みをコンパイルしていない、または

C) 非標準の壊れた実装で作業している。