我试图创建一个包含0到26之间的20个整数的列表(因此在1-25范围内),这些整数不作为赋值的一部分重复。我以为我已经弄明白了,但程序一直在循环而没有结束。任何人都可以帮助我吗?
import java.util.Random;
public class prog433a
{
public static void main(String args[])
{
Random r = new Random();
int[] list = new int[20];
for (int k = 0; k < list.length; k++)
{
boolean notADupe = false;
while (notADupe == false)
{
list[k] = r.nextInt(25) + 1;
for (int j = 0; j < list.length; j++)
{
if (list[j] == list [k] && j != k)
{
notADupe = true;
}
else
{
notADupe = false;
break;
}
}
System.out.println(list[k]);
}
}
}
}
编辑:这与其他问题不同,因为我试图弄清楚如何使用我允许在我的作业中使用的方法来检查唯一性(本质上,我已经在我的作业中使用的方法)码)。
答案 0 :(得分:1)
我认为你已经扭转了局面。在if
内,您应该将notADup
设置为false
,而不是true
。但是,我会改为使用变量isDup
,并相应地更改while循环。
还有一个建议:您应该使用while (notADupe == false)
而不是while (!notADupe)
。永远不要比较那样的布尔变量。有时候你可能会感到惊讶。
因此,要解决您的问题,只需将if-else
块更改为:
if (list[j] == list [k] && j != k) {
notADupe = false;
break;
} else {
notADupe = true;
}
顺便说一句,你的解决方案有点复杂。对于每个元素,您将遍历整个数组以查找重复。相反,我建议你保持Set<Integer>
存储已经看过的数字,并检查每个随机生成的数字。如果存在,请跳过它并重新生成。
伪代码看起来像这样:
arr = [] // Your list array, initialize to size 20
seen = [] // A Set
for i from 1 -> arr.length
num = rand.nextInt(25) + 1
while seen contains num
num = rand.nextInt(25) + 1
seen.add(num)
arr[i] = num