错误的随机数的Andr​​oid [英] Bug in random numbers in Android

查看:146
本文介绍了错误的随机数的Andr​​oid的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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相同的数量应该不重复的随机数。

I want to generate random numbers between 1 and 16 and the same number should not be repeated.

在code以上给了我这样的输出:

The code above gives me output like:

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

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

I do not know why it gives me random numbers not in the 1-16 range, please help me out.

推荐答案

要生成一个范围内的随机数,它是这样的:

To generate a random number in a range, it is like:

int min = ...
int max = ...
int randNumber = min + new Random().nextInt(max - min + 1);

所以,在你的榜样,你想生成[1,16]一个随机数,它看起来像:

So in your example where you want to generate a random number from [1, 16], it would look like:

int randNumber = 1 + new Random().nextInt(16 - 1 + 1);

或者,如果你选择简化:

Or if you choose to simplify:

int randNumber = 1 + new Random().nextInt(16);

另外,你真的应该使用,而循环而不是无限循环:

Also, you should really be using a while loop instead of an infinite for loop:

    final TreeSet<Integer> myNumbers = new TreeSet<>();
    final Random rand = new Random();
    for(int i = 0; i < 16; i++){
        int n = 1 + rand.nextInt(16);
        while(!myNumbers.add(n))
            n = 1 + rand.nextInt(16);
    }

这篇关于错误的随机数的Andr​​oid的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆