【问题标题】:Using Random Class but my variable isn't random? [duplicate]使用随机类但我的变量不是随机的? [复制]
【发布时间】:2020-07-04 18:43:21
【问题描述】:
 for(int i = 0; i < emojiCnt; i++){

            Random rand = new Random(1000);
            int randNum = rand.nextInt((3) + 1);
            switch (randNum){
                case 1:
                    //Code
                case 2:
                    //Code
                case 3:
                    //Code
                default:
                    //Code
            }
            randNum = rand.nextInt((10) + 1);
        }

每次我运行代码时,它都会给出相同的结果并且不是随机的?我重新分配了 randNum,这样它就会变成一个随机数,但它似乎没有改变?

【问题讨论】:

  • 您在 Random 构造函数中使用相同的种子。如果您希望结果不同,请不要这样做,而是使用默认构造函数

标签: java math random


【解决方案1】:

Random rand = new Random(1000); 告诉 java 基于初始种子 1000 创建一个 Random。这会产生随机但仍可重现的结果。

如果您希望每次执行都使用不同的值,请改用Random rand = new Random();

【讨论】:

    【解决方案2】:

    您可以通过调用 ... = new Random(1000); 为 RNG 播种常量。使用相同的种子,总是会得到相同的“随机数”序列。不要播种 (... = new Random();),值应该是“随机的”。


    关于随机性和编程的评论:

    如果没有外部熵生成器,计算机通常无法生成真正的随机性。因此,随机数生成器通过使用初始种子来生成伪随机序列。该序列通常满足真正随机序列所期望的所有条件,但一旦知道种子,它就具有确定性。更多信息请访问wikipedia article on Random number generators

    【讨论】:

    • 副本中的许多答案都比较详细
    【解决方案3】:

    尝试使用此代码获取随机数:

    Random rand = new Random();
    int maxNumber = 1000;
    rand.nextInt(maxNumber)
    

    此代码将为您带来 0 到 1000 之间的随机值

    【讨论】:

    • 那么为什么随机不需要种子呢?
    • 因为你在 nextInt() 函数中设置了最大数
    • 那么种子什么都做不了?!
    • 取决于您将如何在代码中实现随机,但这是我使用它的方式,您可以在此处找到有关它的更多信息:docs.oracle.com/javase/8/docs/api/java/util/Random.html
    • 如果它解释了为什么提供的代码有效,这将是一个更好的答案。仅仅为他们编写某人的代码可能对问题的发布者有所帮助,但对其他读者并没有多大帮助。
    猜你喜欢
    • 1970-01-01
    • 2015-09-10
    • 2011-06-19
    • 2012-10-04
    • 2020-05-13
    • 1970-01-01
    • 2011-11-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多