Java 一个数学随机变量的变量减量,确保非相对性?

Java 一个数学随机变量的变量减量,确保非相对性?,java,Java,我知道这可能是一个无稽之谈,但我现在不能在30分钟内把我的头围绕着它。 我不明白这段代码是如何排除重复Math.random结果的可能性的 本部分: chosenNumbers[rundom] = chosenNumbers[biggestNumber - 1]; biggestNumber--; 以某种方式确保不会重复任何数字。有人能告诉我它是怎么工作的吗?它是否会更改每个循环的“biggestNumber”值?如果是这样的话,Math.random仍然可以通过乘以最初较大的“biggest

我知道这可能是一个无稽之谈,但我现在不能在30分钟内把我的头围绕着它。 我不明白这段代码是如何排除重复Math.random结果的可能性的

本部分:

chosenNumbers[rundom] = chosenNumbers[biggestNumber - 1];
biggestNumber--;
以某种方式确保不会重复任何数字。有人能告诉我它是怎么工作的吗?它是否会更改每个循环的“biggestNumber”值?如果是这样的话,Math.random仍然可以通过乘以最初较大的“biggestNumber”,得出一个即使乘以递减的“biggestNumber”也与之前得出的数字完全相同的数字

Scanner sc=新扫描仪(System.in);
System.out.println(“您需要绘制多少个数字?”);
int numbersToDraw=sc.nextInt();
System.out.println(“最大的数字是多少?”);
int biggestNumber=sc.nextInt();
int[]chosenNumbers=新int[biggestNumber];
for(int i=0;i
该代码保留一个可能值的数组——chosenNumbers——并使用一个随机数作为数组的索引。使用该值后,它会将其从列表中删除。即使您再次获得相同的随机数,该点的值现在将来自该点+1

例如,如果biggestNumber为10,则数组包含值{1,2,3,…,10}

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

    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);
    }