生成随机数,不会返回一些数字

时间:2017-03-17 19:32:14

标签: java random

只是尝试生成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个不同数字的错误是什么?

2 个答案:

答案 0 :(得分:2)

不适合我亲爱的!

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

  

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

     

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

但是,如果您对java.util.Random课程的行为不满意。您可能希望查看java Security包中的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可以找到关于锄头SecureRandom工作的很棒的解释。如果您需要更多帮助,请告诉我。

答案 1 :(得分:1)

代码有效,请尝试更大的样本。 你也可以这样写,

  

的System.out.println(1 + rand.nextInt(8))

跳过数组。