我正在为类创建一个程序,该程序要求程序在1-40范围内创建6个随机生成的整数并将它们放入数组中。整数必须是唯一的,因此不能存在数字特定数字重复的情况。然后将该数组传递给另一个按升序对数组进行排序的方法。我的问题是我无法获取代码来生成6个唯一数字。我的代码如下:
private static void getComputer(int computerNumbers, int[] cN)
{
Random randomNumbers = new Random();
for (int i = 0; i < computerNumbers;)
{
int computerStored = randomNumbers.nextInt(39)+1;
if (computerStored == cN[0] || computerStored == cN[1] || computerStored == cN[2] ||
computerStored == cN[3] || computerStored == cN[4] || computerStored == cN[5])
continue;
else
computerStored = cN[i];
i++;
}
}
上面的代码块输出一个0,0,0,0,0,0的数组。我无法找出原因。任何帮助将非常感激。谢谢。
为了澄清,我知道如何做一个基本的随机发生器。
private static void getComputer(int computerNumbers, int[] cN)
{
Random randomNumbers = new Random();
for (int i = 0; i < computerNumbers; i++)
cN[i] = randomNumbers.nextInt(39)+1;
}
答案 0 :(得分:0)
你可能意味着
cN[i] = computerStored;
另请注意,此代码存在三个问题:您正在传递数组的大小,这是Java中的错误形式,您永远无法获得零(从技术上讲,这不是一个错误,因为你处理的只是1-40),你的条件非常笨拙。相反,我这样做:
for(int i = 0; i < cN.length;) {
int candidate = randomNumbers.nextInt(39) + 1;
// actually, I'd either move this into another method or use a `Set` in the first place
boolean duplicate = false;
for(int j = 0; j < i || !duplicate; j++)
if(candidate == cN[j])
duplicate = true;
if(!duplicate)
cN[i++] = candidate;
}
答案 1 :(得分:0)
我会以不同的方式处理这个问题:
像这样:
List<Integer> list = new ArrayList<>(40);
for (int i = 1; i < 41; i++)
list.add(i);
Collections.shuffle(list);
int[] cN = new int[6];
for (int i = 0; i < cN.length; i++)
cN[i] = list.get(i);
这种方法的优点是你不必处理重复问题,它利用JDK进行随机化。