java时间随机
① java 生成随机数的 5 种方式,你知道几种
Java生成随机数的五种方式,你知道几种?本文将带你深入了解这五种方法,从原理到使用,一一解析。
第一种方式是通过`Math.random()`静态方法。这个方法产生的随机数位于0到1之间(包括0但不包括1),如示例所示。该方法在首次调用时自动创建一个伪随机数生成器,后续调用将使用此生成器。实现原理为使用当前时间作为种子进行线性同余法伪随机数生成,确保线程安全。
第二种方式是`java.util.Random`工具类。它使用线性同余法生成随机数,但存在可预测性问题,对于安全关键应用不推荐使用。示例展示了其生成的随机数。每次初始化时,使用当前系统时钟作为种子。
第三种方式是`java.util.concurrent.ThreadLocalRandom`工具类,特别适用于并发环境。它为每个线程提供独立的随机数生成器,有效解决线程间竞争问题,提高并发性能。该类内部继承自`java.util.Random`。
第四种方式是`java.Security.SecureRandom`。此类提供加密的强随机数生成器,要求种子不可预知,确保非确定性输出。SecureRandom从操作系统收集随机事件(如键盘点击)作为种子,适用于安全敏感应用。
第五种方式是使用Apache Commons-Lang的`RandomStringUtils`类。通过Maven依赖集成此类,可生成随机字符串。其内部基于`java.util.Random`实现。
综上所述,了解这五种生成随机数的方式对Java开发者至关重要。不同场景下,选择合适的方法可确保代码质量和安全性。
② 怎样编写java代码实现能产生(0-9)的随机数
这个的方法有非常多.1.你可以使用时间来做到获取当前毫秒数,比如:System.currentTimeMillis;2.使用 Math类Double b=(Double)(Math.random()*1000);3.使用专用随机类Random random=new Random();int intNumber=random.nextInt(); 当然,这些方法返回的未必是一个0-9的数,假设 获得的数为 a你可以使用 String b = String.valueOf(a);
int c = Integer.valueOf(b.substring(b.length()-1));来获取最后一个数
③ java产生随机数的几种方式
在Java中,生成随机数有几种常用的方法。首先,可以通过Math类的随机函数直接生成指定范围的随机数。例如,要生成1到10之间的int类型随机数,可以使用下面的公式:(int)(1+Math.random()*(10-1+1))。这将产生一个介于1到10之间的整数。
其次,使用for循环结合上述公式可以生成多个随机数。例如,以下代码段将输出30个1到10之间的随机整数:for (int i=0;i<30;i++) {System.out.println((int)(1+Math.random()*10));} 这种方式可以灵活地生成任意数量的随机数。
第三种方法是利用Random类。通过创建Random对象实例,可以调用其nextInt方法生成指定范围的随机整数。例如,以下代码将生成1到10之间的随机整数30次:Random ra = new Random(); for (int i=0;i<30;i++) {System.out.println(ra.nextInt(10)+1);} 这种方式不仅限于整数,还可以生成随机的小数。
除了整数和小数,还可以生成0到1之间的随机小数。通过调用Math类中的random方法,可以直接得到一个0到1之间的随机数。如果需要生成一个[0,d)区间的随机小数,可以将random方法的返回值乘以d。例如,生成一个0到5之间的随机小数,可以使用:Math.random()*5。
此外,若需要生成[n1,n2]区间内的随机数,可以使用Random类的nextDouble方法结合简单的数学运算实现。例如,生成[2,8]区间内的随机数,可以使用:ra.nextDouble() * (8-2)+2。这将确保生成的随机数位于指定的范围内。
综上所述,Java提供了多种生成随机数的方法,可以根据具体需求选择合适的方法。无论是整数、小数还是特定范围内的随机数,Java都能提供相应的解决方案。
④ java 随机时间
java生成某个时间段内的随机时间(先定义一个时间段,之后随机生成符合条件的时间):
DaterandomDate=randomDate("2010-09-20","2010-09-21");
/**
*生成随机时间
*@parambeginDate
*@paramendDate
*@return
*/
privatestaticDaterandomDate(StringbeginDate,StringendDate){
try{
SimpleDateFormatformat=newSimpleDateFormat("yyyy-MM-dd");
Datestart=format.parse(beginDate);//构造开始日期
Dateend=format.parse(endDate);//构造结束日期
//getTime()表示返回自1970年1月1日00:00:00GMT以来此Date对象表示的毫秒数。
if(start.getTime()>=end.getTime()){
returnnull;
}
longdate=random(start.getTime(),end.getTime());
returnnewDate(date);
}catch(Exceptione){
e.printStackTrace();
}
returnnull;
}
privatestaticlongrandom(longbegin,longend){
longrtn=begin+(long)(Math.random()*(end-begin));
//如果返回的是开始时间和结束时间,则递归调用本函数查找随机值
if(rtn==begin||rtn==end){
returnrandom(begin,end);
}
returnrtn;
}