【问题标题】:Generating random numbers, doesn't return some numbers生成随机数,不返回一些数字
【发布时间】:2017-03-18 04:15:35
【问题描述】:

只是想生成 8 个随机数,但我只返回了 3 个数字。

代码:

import java.util.Random;

public class One{
  public static void main(String[] args){

      Random rand = new Random();
      int[] deciJunc = new  int[8];

      for(int i=0; i<8; i++){
          deciJunc[i] = 1+rand.nextInt(8);
          System.out.println(deciJunc[i]);
      }

  }
}

输出:

3
5
7
3
3
5
7
3

输出:

3
3
3
5
7
7
7
3

现在,我已经运行了这个程序 10 次,它只给了我这 3 个数字 (3,5,7),我不明白出了什么问题。 如果我改变:

deciJunc[i] = 1+rand.nextInt(8);

deciJunc[i] = 4+rand.nextInt(8);

效果很好,我得到了一个很好的混合输出,例如:

8
9
10
4
4
9
9
6

第一个只返回 3 个不同的数字有什么问题?

【问题讨论】:

  • 在 8 个可能性中获得 3 个不同的数字有什么问题?这仍然符合随机标准
  • 我运行它时得到合理的结果。
  • 也无法重现您的问题:ideone.com/kzcWmG
  • 忍不住:xkcd
  • 今日趣事:发生这种情况的概率为 8e-35。恭喜,您连续中了 5 次彩票:D。 (以防你实际运行了 10 次)

标签: java random


【解决方案1】:

不适合我亲爱的!

请在多次运行您的代码时观察我的结果:

结果 1:6、5、8、7、8、1、5、2

结果 2:8、1、7、3、8、6、8、5

不过,如果您对 java.util.Random 类的行为不满意。您可能希望查看 java 安全包中的 SecureRandom,其中使用算法生成随机数。

import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;

public class SecureRandom {

    public static void main(String[] args) {
        try {
            java.security.SecureRandom secureRandomGenerator = java.security.SecureRandom.getInstance("SHA1PRNG");
            byte[] randomBytes = new byte[128];
            secureRandomGenerator.nextBytes(randomBytes);
            int seedByteCount = 5;
            byte[] seed = secureRandomGenerator.generateSeed(seedByteCount);

            java.security.SecureRandom secureRandom1 = java.security.SecureRandom.getInstance("SHA1PRNG");
            secureRandom1.setSeed(seed);
            java.security.SecureRandom secureRandom2 = java.security.SecureRandom.getInstance("SHA1PRNG");
            secureRandom2.setSeed(seed);
        } catch (NoSuchAlgorithmException e) {
            throw new Exception("CustomAlgorithmNotFoundException" + e);
        }
    }
}

Here you 可以找到有关 hoe SecureRandom 作品的精彩解释。如果您需要更多帮助,请告诉我。

【讨论】:

    猜你喜欢
    • 2020-11-29
    • 1970-01-01
    • 1970-01-01
    • 2011-06-18
    • 1970-01-01
    • 2011-04-14
    • 1970-01-01
    • 2018-05-03
    • 1970-01-01
    相关资源
    最近更新 更多