4

前の乱数よりも大きい乱数と小さい乱数を生成しようとしていますが、方法がわかりません。

私はこれまでのところこれを持っています:

number = (int)( max * Math.random() ) + min;
guess = (int)( max * Math.random() ) + min;
if (guess<number)
   {
      guess = (int)( max * Math.random() ) + min;
      System.out.println(guess);
    }
else if (guess>number)
 {
      guess = (int)( max * Math.random() ) + min;
     System.out.println(guess);
 }

更新: 既に生成されている乱数を生成しないようにするにはどうすればよいですか? コンピューターは、生成された数字を推測しようと 10 回試行しますが、既に間違っていることがわかっている数字を生成しないように、論理的にしたいと考えています。

4

4 に答える 4

3

乱数のリストを注文するのはどうですか...

public static void method2() throws Exception {
    Random rng = new SecureRandom();
    Set<Integer> numbers = new HashSet<>();
    while (numbers.size() < 3) {
        // number only added if not already present in Set, set values are unique
        numbers.add(rng.nextInt(MAX));
    }
    List<Integer> numberList = new ArrayList<>(numbers);
    Collections.sort(numberList);
    // lower random at index 0, mid at index 1
    // you can guess where the other one is hiding 
    System.out.println(numberList);
}

最初にそれらをセットに入れて、重複がないことを確認します。もちろん、MAX値が 1 の場合、これには時間がかかる場合があります。

このアプローチの利点の 1 つは、数値が 0 から MAX までかなり適切に分散されることです。範囲を直接使用する場合は、上限と下限を処理する必要があります。

もちろん、このアプローチは、値の最大量がリスト内の数値の量 (この場合はわずか 3) よりも (大幅に) 大きい限り、簡単に範囲を超えて機能するように拡張できます。

于 2014-10-31T00:46:30.797 に答える