首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >随机生成器错误

随机生成器错误
EN

Stack Overflow用户
提问于 2015-03-14 15:40:47
回答 2查看 53关注 0票数 1

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

代码语言:javascript
复制
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。错误可能出在哪里?

EN

回答 2

Stack Overflow用户

发布于 2015-03-14 15:43:15

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

您忘记了更新maxN,所以每次迭代都会更新finalChoice (因为maxN < numbers[i][1]总是真的,假设从1到45的每个数字都被随机选择了至少一次),结果是45。

修复:

代码语言:javascript
复制
    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
EN

Stack Overflow用户

发布于 2015-03-14 15:46:19

试试这个:

代码语言:javascript
复制
Random r = new Random();
for (int i = 0; i <= 1000000; i++) {
    int Low = 1;
    int High = 45;
    int R = r.nextInt(High - Low) + Low;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29046650

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档