Java中常用的三种产生随机数的方法详解(currentTimeMills,random,Math.random)

本文详细介绍了Java中三种生成随机数的方法:currentTimeMills、random和Math.random()。通过实例展示了它们的使用方式、原理,并解释了如何生成特定范围内的随机数,同时分析了各种情况下可能出现的问题及解决方案。
摘要由CSDN通过智能技术生成

Java中常用的三种产生随机数的方法及其原理详解(currentTimeMills,random,Math.random)


这学期笔者开始学习Java,由于以前有了C做基础,学Java明显可以轻松许多,但是这几天有个问题很苦恼,有几道题目要产生随机数,我百度了一下,发现了多种使用的方法,但大多知识是零星的。于是今天我打算给大家分享一下我总结了的三种在Java里面很常用的方法。如果有任何不恰当的地方,欢迎大家在评论区不吝指出或者是私信我,我会尽力改正,给大家呈现更优质的内容。

一.使用currentTimeMills

currentTimeMills返回的是从1970年一月一日零时零分零秒到现在总共的毫秒数,我们可以用这个毫秒数来产生随机数。如何产生呢?

如果要是产生[0,n-1]范围内的随机数,可以这样写:

int randomNum1 = (int)(System.currentTimeMillis()%10);
//用当前时间获得[0,9]之间的随机数

这个函数就能够产生[0,9]范围内的随机数啦!
那我们要是想产生多个随机数怎么办,有的小伙伴可能会想,我写两个不就好了,那我们看看写两个到底行不行:

 int randomNum1 = (int)System.currentTimeMillis()%10;
 //用当前时间获得[0,9]之间的随机数
  int randomNum2 = (int)System.currentTimeMillis()%10;
   System.out.println("用当前时间获得的随机数:"+randomNum1+" "+randomNum2);
  //输出第一次:用当前时间获得的随机数:-1 -1
  //输出第二次:用当前时间获得的随机数:-1 -1
  //输出第三次:用当前时间获得的随机数:-9 -9

我把程序运行了三次,但是奇怪的是,程序并没有按照我们所想的那样输出,这是为什么呢?细心地小伙伴可能发现了,上面第一个代码块和第二个代码块有一点细微的差别,第一个代码块System.currentTimeMillis()%10整体打上了括号,而第二个没有,出现这个问题的原因我细细说来。

最最重要的一点,我们把随机数定义成了int型,而System.currentTimeMillis返回的是一个long型的毫秒数,所以我用了强制类型转换(int)要知道,强制类型转换()可是优先级很高的,*,%的优先级都比它低,所以如果不打括号,系统就会把一个long型的值强制转换为int型,因为这个long型的数据的值太大了,以至于超过了int的范围,这个过程中当然会出错了,口说无凭,上代码:

  int randomNum1 = (int)(System.currentTimeMillis()%10);
  //用当前时间获得[0,9]之间的随机数
  int randomNum2 = (int)System.currentTimeMillis()%10;
  long randomNum3 = System.currentTimeMillis();
  int randomNum4 = (int)System.currentTimeMillis();
  System.out.println("打括号:"+randomNum1+"\n不打括号"
  +randomNum2+
  • 27
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值