我怀疑如果我将我的
index++
留在ifn
中,就像下面的代码一样,程序不会执行,但是如果我把它放在开头,如果已经生成的数字是,则程序永远不会生成新数字一样的,我真的不知道我的错误在哪里
注意:我是在 Windows Builder 中完成的
private int[] number = new int[] { -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1};
private int index;
private int randomNumber;
private boolean numberRepeated;
Random random = new Random();
index = 0;
while(index < 10) {
randomNumber = random.nextInt(9);
numberRepeated = false;
for(int i = 0 ; i < index; i++) {
if(number[i] == randomNumber) {
numberRepeated = true;
break;
}
}
if(!numberRepeated) {
number[index] = randomNumber;
index++;
}
}
我已经尝试过更改
index++
,但是当我这样做时,如果已经输入了相同的值,程序不会生成新值。
第一个问题是
Random.nextInt(9)
给出从 0 到 8 的值。
numberRepeated
会发生得越来越多,index
就越大。甚至不能 100% 保证随机找到最后一位数字。
private int[] number = new int[10];
Random random = new Random();
for (int index = 0; index < 10; ++index) {
randomNumber = random.nextInt(10); // 0 .. 9
boolean numberRepeated = false;
for (int i = 0 ; i < index; i++) {
if (number[i] == randomNumber) {
numberRepeated = true;
break;
}
}
if (!numberRepeated) {
number[index] = randomNumber;
index++;
}
}
更好更快
// Start sorted:
for (int index = 0; index < 10; ++index) {
number[index] = index;
}
// Randomly swap elements:
Random random = new Random();
for (int index = 0; index < 10; ++index) {
int index2 = randomNumber = random.nextInt(10); // 0 .. 9
// Swap values at index and index2;
int temp = number[index];
number[index] = number[index2];
number[index2] = temp;
}
这可以用较新的 java 结构来完成,例如 0 .. 9:
number = IntStream.range(0, 10).toArray();
或:
Arrays.setAll(number, IntUnaryOperator::identity);
或者;
Arrays.setAll(number, i -> i);