gpt4 book ai didi

java - Math.random 的变量递减确保非重复性?

转载 作者:行者123 更新时间:2023-12-01 21:48:42 26 4
gpt4 key购买 nike

我知道这可能是菜鸟的问题,但我现在无法花 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);
}

最佳答案

代码保留了一个可能值的数组——selectedNumbers——并使用一个随机数作为数组的索引。一旦使用该值,就会将其从列表中删除。即使您再次获得相同的随机数,该点的值现在也将从该点开始 + 1。

例如,如果 MaximumNumber 为 10,则数组包含值 {1, 2, 3, ..., 10}。

假设您得到随机数 2。selectedNumbers[2] 实际上是 3(因为数组索引为 0),因此您将 3 添加到输出中。但随后代码会移动 selectedNumbers[3] -> [2]、[4] -> [3] 等。因此,以前在 [2] 中的 3 现在消失了,无法再次选择。

关于java - Math.random 的变量递减确保非重复性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58771348/

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