zoukankan      html  css  js  c++  java
  • 实现java随机数Random的几招


    一,在java.util这个包里面提供了一个Random的类,我们可以新建一个Random的对象来产生随机数,可以产生随机整数、随机float、随机double,随机long,这个也是我们经常用的一个
    取随机数的方法。 

    二,在我们的System类中有一个currentTimeMillis()方法,这个方法返回一个从1970年1月1号0点0分0秒到目前的一个毫秒数,返回类型是long,我们可以拿他作为一个随机数,
    我们可以拿他对一些数取模,就可以把他限制在一个范围之内啦 

    三,其实在Random的默认构造方法里也是使用上面第三种方法进行随机数的产生的 


    对于方法二中的Random类有以下说明: 

    java.util.Random类有两种方式构建方式:带种子和不带种子 

    不带种子: 
    此种方式将会返回随机的数字,每次运行结果不一样 

    public class RandomTest { 
    public static void main(String[] args) { 
      java.util.Random r=new java.util.Random(); 
    for(int i=0;i<10;i++){ 
        System.out.println(r.nextInt()); 



    带种子: 
    此种方式,无论程序运行多少次,返回结果都是一样的 

    public static void main(String[] args) { 
      java.util.Random r=new java.util.Random(10); 
      for(int i=0;i<10;i++){ 
        System.out.println(r.nextInt()); 
      } 


    两种方式的差别在于 

    (1) 首先请打开Java Doc,我们会看到Random类的说明: 

    此类的实例用于生成伪随机数流,此类使用 48 位的种子,该种子可以使用线性同余公式对其进行修改(请参阅 Donald Knuth 的《The Art of Computer Programming, Volume 2》,第 3.2.1 节)。  

    如果用相同的种子创建两个 Random 实例,则对每个实例进行相同的方法调用序列,它们将生成并返回相同的数字序列。为了保证实现这种特性,我们为类Random指定了特定的算法。为了 Java 代码的完全可移植性,Java 实现必须让类 Random 使用此处所示的所有算法。但是允许 Random 类的子类使用其他算法,只要其符合所有方法的常规协定即可。  

    Java Doc对Random类已经解释得非常明白,我们的测试也验证了这一点。 

    (2) 如果没有提供种子数,Random实例的种子数将是当前时间的毫秒数,可以通过System.currentTimeMillis()来获得当前时间的毫秒数。打开JDK的源代码,我们可以非常明确地看到这一点。 

    /**  
    * Creates a new random number generator. Its seed is initialized to  
    * a value based on the current time: 
    * Random() { this(System.currentTimeMillis()); }java.lang.System#currentTimeMillis() 
    */ 
    public Random() { this(System.currentTimeMillis()); } 


    另外:  

    random对象的nextInt(),nextInt(int n)方法的说明: 

    int nextInt()  
        返回下一个伪随机数,它是此随机数生成器的序列中均匀分布的 int 值。  
    int nextInt(int n)  
        返回一个伪随机数,它是从此随机数生成器的序列中取出的、在 0(包括)和指定值(不包括)之间均匀分布的 int值。



    30个学生学号20171118到20171148 全部选修Java程序设计课程,所有同学成绩随机产生60-100的随机数
    package ltb6w;
    import java.util.Random;
    
    
    public class StuScore {
        
        
        Random r=new Random();
    
        private int num=0;
        private int sum=0;
        private int studentid=20171118;
        
        
        private  String java="java程序设计课程:";
        
        
        public StuScore() {
            
            num=this.getRandom();
            
        }            
                     
        public void getScore() {
            
            while (sum<31) {
                
            
                
                if(num>100||num<60) {
                    
                 num= this.getRandom();
                    continue;
                }
                    
                
                System.out.println("学号:"+studentid+"   "+java+"成绩:"+num);
                sum++;
                studentid++;
                this.getRandom();
            
            }
            
        }
    
        
        
        
        public int getRandom() {
            
             num=r.nextInt(100);
            return num;
        }
        
        
        public static void main(String[] args) {
            
            StuScore st=new StuScore();
                   
            st.getScore();
            
        }
    
    }
  • 相关阅读:
    mybatis 错误 Invalid bound statement (not found)
    Redis is configured to save RDB snapshots, but is currently not able to persist on disk. Commands that may modify the data set are disabled. Please check Redis logs for details about the error.
    bug 记录 Unable to start ServletWebServerApplicationContext due to multiple ServletWebServerFactory beans
    解决:The Tomcat connector configured to listen on port 8182 failed to start. The port may already be in use or the connector may be misconfigured.
    jquery validate 验证插件 解决多个相同的Name 只验证第一个的方案
    phpStorm+xdebug调试(php7.3)
    小程序视频多个视频播放与暂停
    CSS实现单行、多行文本溢出显示省略号(…)
    Packet for query is too large (4,544,730 > 4,194,304). You can change this value on the server by setting the 'max_allowed_packet' variable.
    idea自动在文件头中添加作者和创建时间
  • 原文地址:https://www.cnblogs.com/ltb6w/p/7857767.html
Copyright © 2011-2022 走看看