随机发生器错误

时间:2015-03-14 07:40:47

标签: java random

我想编写一个随机化1000000次的程序,最后选择大多数时间随机生成的1到45的数字。我写的代码是:

public class Randomizer {
    public static int[][] numbers = new int[45][2];
    public static int maxN = 0;
    public static int finalChoice;
    public static void main(String[] args){

        for(int i = 0; i < 45; i++){
            numbers[i][0] = i + 1;
            numbers[i][1] = 0;          
        }

        for(int i = 0; i < 1000000; i ++){
            int rnd = (int)(Math.random() * 45 + 1);
            for(int j = 0; j < 45; j++){
                if(rnd == numbers [j] [0]){
                    numbers[j][1] ++ ;
                    break;
                }
            }
        }
        for(int i = 0; i < 45; i++){
            if(maxN < numbers[i][1]){
                finalChoice = numbers[i][0];
            }
            System.out.print(numbers[i][1]+" \t");
        }

        System.out.println("\nFinal Choice: "+finalChoice);

    }



}

问题是它继续打印45.错误在哪里?

2 个答案:

答案 0 :(得分:1)

生成数字并填充数组的循环看起来很好。唯一的问题是在最后一个循环中,它会搜索发生率最高的数字。

您忘记更新maxN,因此每次迭代都会更新finalChoice(因为maxN < numbers[i][1]始终为真,假设从1到45的每个数字至少随机选择一次)并且它结束了45岁。

修复:

    for(int i = 0; i < 45; i++){
        if(maxN < numbers[i][1]){
            finalChoice = numbers[i][0];
            maxN = numbers[i][1]; // add this
        }
        System.out.print(numbers[i][1]+" \t");
    }

答案 1 :(得分:0)

试试这个:

Random r = new Random();
for (int i = 0; i <= 1000000; i++) {
    int Low = 1;
    int High = 45;
    int R = r.nextInt(High - Low) + Low;
}