And*_* me 0 java random math android
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();
}
Run Code Online (Sandbox Code Playgroud)
我想生成1到16之间的随机数,并且不应重复相同的数字.
上面的代码给出了如下输出:
2, 5, 7, 9, 1, 4, 10.4109446, -448831, 98824724, 11, 13, ...
Run Code Online (Sandbox Code Playgroud)
我不知道为什么它给了我不在1-16范围内的随机数,请帮帮我.
要生成范围内的随机数,它就像:
int min = ...
int max = ...
int randNumber = min + new Random().nextInt(max - min + 1);
Run Code Online (Sandbox Code Playgroud)
因此,在您想要从[1,16]生成随机数的示例中,它看起来像:
int randNumber = 1 + new Random().nextInt(16 - 1 + 1);
Run Code Online (Sandbox Code Playgroud)
或者,如果您选择简化:
int randNumber = 1 + new Random().nextInt(16);
Run Code Online (Sandbox Code Playgroud)
此外,您应该使用while
循环而不是无限for
循环:
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);
}
Run Code Online (Sandbox Code Playgroud)
您只生成1-15范围内的一个数字.然后,您只需使用以下内容生成后续数字nextInt
:
if (myNumbers.add(randNum))
break;
else
randNum = randGen.nextInt();
Run Code Online (Sandbox Code Playgroud)
那应该是:
if (myNumbers.add(randNum))
break;
else
randNum = randGen.nextInt(16) + 1;
Run Code Online (Sandbox Code Playgroud)
...并修复初始调用nextInt
以删除"-1".(你不需要16 - 1
,正如Josh的回答所解释的那样.)