Android 如何使random.nextInt()仅在生成其他数字时重复已生成的数字
假设我想生成从0到5的数字,我想随机生成。nextInt(5)首先生成所有数字,然后重复其中任何一个,例如0,3,1,5,2,4,然后重复,但不使用数字(4)。我对这些数字是如何产生的一点都不介意。我只知道如何随机化一切。列出数字=数组。asList(0,1,2,3,4,5);Android 如何使random.nextInt()仅在生成其他数字时重复已生成的数字,android,Android,假设我想生成从0到5的数字,我想随机生成。nextInt(5)首先生成所有数字,然后重复其中任何一个,例如0,3,1,5,2,4,然后重复,但不使用数字(4)。我对这些数字是如何产生的一点都不介意。我只知道如何随机化一切。列出数字=数组。asList(0,1,2,3,4,5); List<Integer> numbers = Arrays.asList(0, 1, 2, 3, 4, 5); Collections.shuffle(numbers); for (
List<Integer> numbers = Arrays.asList(0, 1, 2, 3, 4, 5);
Collections.shuffle(numbers);
for (int n : numbers) {
// numbers will be in random order here
}
收藏。洗牌(数字);
用于(整数n:数字){
//这里的数字将按随机顺序排列
}
您可以通过将问题分为两部分来完成此操作。
1.生成最多6个的所有no
2.生成与前一个不同的随机数
private void generateNumber() {
if(!isRangeGenerated){ //this is 1st part of solution
int pos = rand.nextInt(6);
while(arrRange[pos]){
pos = rand.nextInt(6);
}
lastNoGenerated = pos;
arrRange[pos]=true;
isRangeGenerated = checkAllNumbergenrated(arrRange);
System.out.println(pos);
}else { //this is 2nd part of solution
int newNum = rand.nextInt(6);
while(newNum == lastNoGenerated){
newNum = rand.nextInt(6);
}
lastNoGenerated = newNum;
System.out.println(newNum);
}
}
用于检查是否生成范围内的所有数字的方法
private boolean checkAllNumbergenrated(boolean[] arrRange) {
for(int i=0;i<arrRange.length;i++){
if(!arrRange[i]){
return false;
}
}
return true;
}
private boolean checkAllNumbergenrated(boolean[]arrRange){
对于(int i=0;irandom.nextInt(5)
请注意域是[0,5)
而不是[0,5]
private boolean checkAllNumbergenrated(boolean[] arrRange) {
for(int i=0;i<arrRange.length;i++){
if(!arrRange[i]){
return false;
}
}
return true;
}