1

ユーザーが4つの数字(1〜6)を選択し、ランダムに生成された4つの数字と比較して、正しい数字の数を伝えるAndroidアプリを作成するタスクを設定しました。

私の問題は、私が任意の番号を生成するときはいつでも、最後の番号を除いて、表示される最初の3つは常に同じであるということです。

    Random a1 = new Random();
    random1 = new ArrayList<Integer>();

    for (int index = 0; index < 6; index++)
    {
        random1.add(a1.nextInt(5)+ 1);
    }

    Random a2 = new Random();
    random2 = new ArrayList<Integer>();

    for (int index = 0; index < 6; index++)
    {
        random2.add(a2.nextInt(5)+ 1);
    }

これは私が乱数を生成するために使用するコードです。各番号はまったく同じコードを使用しているため、さらに混乱します。それらがすべて同じである場合、同じコードであるため、同じ番号か何かを生成することが理解できます。それらの行ですが、最後の行は常に異なります。助けていただければ幸いです。

4

2 に答える 2

0

2 つの Random インスタンスを作成するのではなく、1 つのインスタンスを再利用してください。近いシードを持つ 2 つのランダムは、近い出力を生成します。

于 2012-09-20T10:27:03.573 に答える
0

以下のコードが機能するかどうかを確認してください。http://www.javapractices.com/topic/TopicAction.do?Id=62から取得したコード。要件に応じて変更されました。

public final class RandomRange {

public static final void main(String... aArgs) {

    int START = 1;
    int END = 6;
    Random random = new Random();
    List<Integer> first = new ArrayList<Integer>();
    List<Integer> second = new ArrayList<Integer>();
    for (int idx = 1; idx <= END; ++idx) {
        first.add(showRandomInteger(START, END, random));
        second.add(showRandomInteger(START, END, random));
    }
    System.out.println(first);
    System.out.println(second);
    first.retainAll(second);//Find common
    System.out.println(first);

}

private static int showRandomInteger(int aStart, int aEnd, Random aRandom) {
    if (aStart > aEnd) {
        throw new IllegalArgumentException("Start cannot exceed End.");
    }
    // get the range, casting to long to avoid overflow problems
    long range = (long) aEnd - (long) aStart + 1;
    // compute a fraction of the range, 0 <= frac < range
    long fraction = (long) (range * aRandom.nextDouble());
    int randomNumber = (int) (fraction + aStart);
    return randomNumber;
}

}
于 2012-09-20T10:30:03.073 に答える