gpt4 book ai didi

Java 数组和随机数

转载 作者:行者123 更新时间:2023-11-29 09:43:48 24 4
gpt4 key购买 nike

我正在尝试生成一个随机数数组。每个数组条目都有一个介于 0 和 31 之间的数字。我正在尝试获取生成随机数的代码,然后检查数组中是否存在该数字。如果是,它会生成一个新的随机数并再次从头开始检查。

我以为我用下面的代码怀疑了它:

 public class HelloWorld{

public static void main(String []args){
int[] randArray = new int[10];
boolean firstNumber = true;
int randNum = 0;

for (int j=0; j < randArray.length; j++) {

if(firstNumber) {
randNum = (int)(Math.random() * 31 + 1);
randArray[j] = randNum;
firstNumber = false;
} else {
for (int k=0; k < randArray.length;) {
randNum = (int)(Math.random() * 31 + 1);
if(randArray[k] == randNum) {
k=0;
} else {
k++;
}
}
randArray[j] = randNum;
System.out.println(j);
}
}

System.out.println("-------");

for(int i=0; i < randArray.length; i++) {

System.out.println(randArray[i]);

}
}
}

但这是它打印出来的:

1 2 3 4 5 6 7 8 9 ------- 25 17 19 20 24 4 26 30 6 24

如您所见,24 重复了两次。如果我再次运行代码,您会看到存储的重复数字。

从逻辑上讲,我无法弄清楚为什么要这样做。它可能很简单,但我就是看不到。

我是编程新手,我想用它来测试我的知识。

最佳答案

您生成唯一随机数的方法是错误的,因为当您到达数组中的最后一个数字 n 时,您只有 1/n 的机会生成您需要的特定数字。并且由于您使用的是随机数,因此可能会等待很长时间才能成功生成整个数组。此外,生成数组的时间极难预测。

一个更好的方法是生成一个序列递增的数组,然后打乱这个数组。这样,您可以保证在 O(n) 中生成数组,并在 O(n) 中打乱数组。

int arraySize=32;
int[] myArray= new int(arraySize);
for(int i=0;i<arraySize;i++) {
myArray[i]=i;
}
for(int i=0;i<arraySize;i++) {
int randNum = (int)(Math.random() * (arraySize-1));
int tmp=myArray[randNum];
myArray[randNum]=myArray[i];
myArray[i]=tmp;
}

关于Java 数组和随机数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22399893/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com