TreeSet myNumbers = new TreeSet();
Random randGen = new Random();

for (int i = 1; i <= 16; i++) {
    // number generation here
    int randNum = randGen.nextInt(16 - 1) + 1;
    for (;;) {
        if (myNumbers.add(randNum))
            break;
        else
            randNum = randGen.nextInt();

    }
    Toast.makeText(getApplicationContext(), "" + randNum, 100).show();
}


我想生成1到16之间的随机数,并且不应重复相同的数字。

上面的代码为我提供了如下输出:

2, 5, 7, 9, 1, 4, 10.4109446, -448831, 98824724, 11, 13, ...


我不知道为什么给我的随机数不在1-16范围内,请帮帮我。

最佳答案

您只会生成一个1-15范围内的数字。然后,您只需使用nextInt即可生成后续数字:

if (myNumbers.add(randNum))
    break;
else
    randNum = randGen.nextInt();


应该是:

if (myNumbers.add(randNum))
    break;
else
    randNum = randGen.nextInt(16) + 1;


...并将初始调用固定为nextInt以删除“ -1”。 (您不需要16 - 1,如Josh的回答所述。)

07-28 13:44