我知道这可能是一个noobie的问题,但是现在大约30分钟我都无法解决这个问题。我不了解此代码如何设法排除重复Math.random结果的可能性。
此部分:
chosenNumbers[rundom] = chosenNumbers[biggestNumber - 1];
biggestNumber--;
以某种方式确保不会重复任何数字。有人可以告诉我它如何运作吗?是否会为每个循环更改“ biggestNumber”的值?如果是这样,Math.random仍然可以通过乘以最初更大的“ biggestNumber”来绘制一个数字,该数字甚至乘以一个递减的“ biggestNumber”将与之前绘制的数字完全相同。]
Scanner sc = new Scanner(System.in);
System.out.println("How many numbers do you need to draw?");
int numbersToDraw = sc.nextInt();
System.out.println("What is the biggest number?");
int biggestNumber = sc.nextInt();
int[] chosenNumbers = new int[biggestNumber];
for (int i = 0; i < chosenNumbers.length; i++){
chosenNumbers[i] = i + 1;
}
int[] result = new int[numbersToDraw];
for(int i = 0; i < result.length; i++){
int rundom = (int) (Math.random() * biggestNumber);
result[i] = chosenNumbers[rundom];
chosenNumbers[rundom] = chosenNumbers[biggestNumber - 1];
biggestNumber--;
}
Arrays.sort(result);
System.out.println("Choose the following numbers to get so really rich.");
for(int r : result){
System.out.println(r);
}
我知道这可能是一个noobie的问题,但是现在大约30分钟我都无法解决这个问题。我不明白这段代码是如何排除重复数学的可能性的。...
代码保留一个可能值的数组-selectedNumbers-并使用随机数作为数组的索引。使用该值后,会将其从列表中删除。即使您再次获得相同的随机数,该点的值现在也将来自该点+1。