-1

1〜8の範囲の2つのフィールドで乱数を生成したいのですが、フィールドの合計は9未満でなければなりません

for (int i; i <= 6; i++) {
    fieldOne = rand.nextInt(9 - 5) + 5;
    fieldTwo = rand.nextInt(9 - 5) + 5;
    fieldSum = fieldOne + fieldTwo;
    System.out.print(fieldSum); // should be < 9 and not repetition
}

しかしfieldSum、9 より大きくなると、この状態をどのように制御するのでしょうか? また、シーケンスはランダムにする必要があり、2 回以上繰り返さないでください

4

3 に答える 3

0

試す、

fieldSum=(fieldOne+fieldTwo)%9;

これは定義されます

于 2013-10-10T11:01:39.027 に答える
0

rand.nextInt(9-5)は 5 から 8 の間の乱数を計算しません。9 から 5 を引いた演算を行い、 を計算しrand.nextInt(4)ます。

5 から 8 の間の乱数を計算するには、次のようにする必要があります。

Random r = new Random();
for (int i = 0; i < 10; i++) {

    int rand1 = r.nextInt(4) + 5;

    int rand2 = r.nextInt(4) + 5;

    int result = rand1 + rand2;
    Log.v("", "" + result);
}

問題は、=> 5 である 2 つの数値を合計しているため、結果が < 9 にならないため、取得できる低い結果が 10 になることです。

繰り返しのないソリューションを編集します。

private List<Integer> rdmNumList = new ArrayList<Integer>();

private final int leftLimitRange = 1;
private final int rightLimitRange = 10;

private final int numOfIteration = 10;

public void generateNumList() {
    for (int i = leftLimitRange; i <= rightLimitRange; i++) {
        this.rdmNumList.add(num);
    }
}

public int getRandomNumer() {
    Random r = new Random();
    int rNum = r.nextInt(rdmNumList.size());
    int result = this.rdmNumList.get(rNum);
    this.rdmNumList.remove(rNum);
    return result;
}

public void test() {
    this.generateNumList();
    if(this.numOfIteration <= ((this.rightLimitRange - this.leftLimitRange + 1))) {
        for (int i = 0; i < this.numOfIteration; i++) {
            Log.v("Debug Output", String.valueOf(this.getRandomNumer()));
        }
    }  
}

注:これは、数値の範囲が狭い場合にのみ効率的です

このコードは機能しますが、良いとは言えません。自分で他の解決策を見つける必要があります。この答えはあなたの道を見つけるのに役立ちます

于 2013-10-10T11:29:50.153 に答える
0

多分これを試してみてください --> random.nextInt()%9; 別の方法 random.nextInt(9) で乱数を取得します。

于 2013-10-10T11:00:10.063 に答える