-1

我想在范围 1-8 之间的两个字段中生成随机数,并且字段总和应该小于 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 那么如何控制这种情况?而且Sequence应该是随机的,不应该重复2次以上

4

3 回答 3

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);
}

问题是结果不能小于 9,因为您将两个数字相加 => 5,因此您可以获得的较低结果是 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) 获取随机 nuber。

于 2013-10-10T11:00:10.063 回答
0

尝试,

fieldSum=(fieldOne+fieldTwo)%9;

这将定义

于 2013-10-10T11:01:39.027 回答