假设我想生成0到5之间的数字,我想让random.nextInt(5)首先生成所有数字,然后再重复它们,例如0,3,1,5,2,4然后重复但不是数字是(4)。我对任何数字的生成方式都没问题。我只知道如何随机化一切。
答案 0 :(得分:0)
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
}
答案 1 :(得分:0)
您可以通过分两部分来解决问题 1.生成所有不到6个 2.生成与前一个不同的随机数。
- 创建一个布尔数组,用于跟踪尚未生成的数组。
- 在int上创建以跟踪之前没有生成的内容。
- 创建一个布尔变量,以便轻松跟进解第二部分。因此,一旦所有数字在范围内生成,您就不需要每次检查。
醇>
boolean[] arrRange= new boolean[6];
boolean isRangeGenerated = false;
int lastNoGenerated = 0;
Random rand;
生成数字的方法。
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;
}