gpt4 book ai didi

java - 我从 java 程序中得到奇怪的输出

转载 作者:行者123 更新时间:2023-12-01 19:01:12 24 4
gpt4 key购买 nike

我遇到了一些奇怪的情况,我想你可以帮助我。我有一个 int 数组,其中填充了从 1 到 10 的数字。我想从该数组生成随机数并将其保存到另一个 int 数组中。我使用 Random 类来选择任何数字,由于随机抛出 0,我也像这样修改它(所以它抛出从 1 到 10 的数字)

randNum = rand.nextInt(numbers.length-min+1)+min;   

以下代码确保如果生成相同的随机数,则会跳过它。程序实际上正在运行,我正在另一个数组中随机放置从 1 到 10 的数字。这就是我想要的。但有时我会遗漏 1 - 10 中的一个数字,而我会得到零。为什么??

int[] numbers = {1,2,3,4,5,6,7,8,9,10};
int[] usednum = new int[10];
Random rand = new Random();
int randNum;
int min = 1;

for (int x = 0; x<numbers.length; x++) {
for (int i = 0; i<usednum.length; i++) {
randNum = rand.nextInt(numbers.length-min+1) + min;
for (int f = 0; f<usednum.length; f++) {
if (usednum[f] == randNum) {
break;
} else if (usednum[f] == 0) {
usednum[x] = randNum;
}
}
}
}

for (int c = 0; c<usednum.length; c++) {
System.out.println(usednum[c]);
}

最佳答案

最内部的 for 循环仅检查当前随机数是否在 usednum[] 数组中。紧接其外的 for 循环仅检查总计 10 次。它放弃得太快了,因为它只尝试了 10 个随机数。如果所有 10 个都已使用,则 usednum[] 的槽中不会存储任何内容(因此它将是 0),请尝试添加 while 围绕它循环并摆脱最外层的 for 循环:

        for(int i = 0; i<usednum.length; i++) {
while(usednum[i]==0) {
randNum = rand.nextInt(numbers.length-min+1)+min;
for(int f = 0; f<usednum.length; f++) {
if(usednum[f] == randNum) {
break;
} //if
else if (usednum[f] == 0) {
usednum[i] = randNum;
}
}
}
}

另请注意,该赋值是针对 usednum[i] = randNum;

这实质上是用 while 循环替换了中间的 for 循环(从 i=0 到 9 的循环)。

关于java - 我从 java 程序中得到奇怪的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12216999/

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