Java常用类中随机数讲解与实践

简介: Java常用类中随机数讲解与实践

项目中时长用到不同长度的随机数,这里简要说明一些方法。

【1】Random

代码实例一如下:

Random random = new Random();
int nextInt = random.nextInt();

其nextInt()的JavaDoc如下:

Returns the next pseudorandom, uniformly distributed int value from this random number generator's sequence. 
The general contract of nextInt is that one int value is pseudorandomly generated and returned. 
All 2 32(The 32 square of 2) possible int values are produced with (approximately) equal probability. 

从随机数生成序列中返回下一个伪随机,均匀分布的int 值。2的32次方在内的int值返回的概率是相等的。


代码实例一如下:

Random random = new Random();
int nextInt2 = random.nextInt(10);
System.out.println(nextInt2);

其nextInt(10)的JavaDoc如下:

Returns a pseudorandom, uniformly distributed int value between 0 (inclusive) and the specified value (exclusive), drawn from this random number generator's sequence. 
The general contract of nextInt is that one int value in the specified range is pseudorandomly generated and returned.
 All bound possible int values are produced with (approximately) equal probability.

主要意思 : 返回 0-指定值区间的一个int 值 ,用区间表示即 [0 , end)。如nextInt(10)返回区间 [0 , 10)。


举例如返回六位随机数:

Random random = new Random();
int nextInt2 = random.nextInt(10)+100000;

这样返回的相同数概率太大了,换成如下方法:

Random random = new Random();
StringBuilder stringBuilder = new StringBuilder();
for(int i=1;i<7;i++){
  int nextInt2 = random.nextInt(10);
  stringBuilder.append(String.valueOf(nextInt2));
}
System.out.println(stringBuilder.toString());

或者试试如下方法:

String sources = "0123456789"; // 加上一些字母,就可以生成pc站的验证码了  
Random rand = new Random();  
StringBuffer flag = new StringBuffer();  
for (int j = 0; j < 6; j++){  
    flag.append(String.valueOf(sources.charAt(rand.nextInt(9))));  
}  
System.out.println(flag.toString());  

【2】Math.random()

代码实例一如下:

double random = Math.random();
System.out.println(random);

其random()的Javadoc如下:

Returns a double value with a positive sign, greater than or equal to 0.0 and less than 1.0.
Returned values are chosen pseudorandomly with (approximately) uniform distribution from that range. 

主要意思: 从指定范围大约均匀分布的值中伪随机选择一个返回,该值为区间在[0.0 , 1.0)之间的double值。

举例如返回六位随机数:

int a=(int) ((Math.random()*9+1)*100000);
System.out.println(a);
目录
相关文章
|
2月前
|
存储 缓存 安全
Java内存模型深度解析:从理论到实践####
【10月更文挑战第21天】 本文深入探讨了Java内存模型(JMM)的核心概念与底层机制,通过剖析其设计原理、内存可见性问题及其解决方案,结合具体代码示例,帮助读者构建对JMM的全面理解。不同于传统的摘要概述,我们将直接以故事化手法引入,让读者在轻松的情境中领略JMM的精髓。 ####
43 6
|
2月前
|
设计模式 Java 开发者
Java中的异常处理:理解与实践
【10月更文挑战第42天】在Java的世界中,异常处理是每个开发者必须面对的挑战。它就像是一场不可预知的风暴,可能会在任何时候突然降临,打乱我们的计划。但是,如果我们能够掌握正确的处理方法,这场风暴也可以变成推动我们前进的力量。本文将带你深入理解Java中的异常处理机制,通过代码示例,我们将一起学习如何捕获、处理和预防异常,让你的程序在面对任何挑战时都能保持稳健和优雅。
|
2月前
|
Java 开发者
在 Java 中,一个类可以实现多个接口吗?
这是 Java 面向对象编程的一个重要特性,它提供了极大的灵活性和扩展性。
160 57
|
12天前
|
JSON Java Apache
Java基础-常用API-Object类
继承是面向对象编程的重要特性,允许从已有类派生新类。Java采用单继承机制,默认所有类继承自Object类。Object类提供了多个常用方法,如`clone()`用于复制对象,`equals()`判断对象是否相等,`hashCode()`计算哈希码,`toString()`返回对象的字符串表示,`wait()`、`notify()`和`notifyAll()`用于线程同步,`finalize()`在对象被垃圾回收时调用。掌握这些方法有助于更好地理解和使用Java中的对象行为。
|
2月前
|
Arthas 监控 Java
拥抱 OpenTelemetry:阿里云 Java Agent 演进实践
本文介绍了阿里云 Java Agent 4.x 版本在基于 OTel Java Agent 二次开发过程中的实践与思考,并重点从功能、性能、稳定性、兼容性四个方面介绍了所做的工作。同时也介绍了阿里云可观测团队积极参与开源建设取得的丰厚成果。
244 7
拥抱 OpenTelemetry:阿里云 Java Agent 演进实践
|
1月前
|
存储 监控 小程序
Java中的线程池优化实践####
本文深入探讨了Java中线程池的工作原理,分析了常见的线程池类型及其适用场景,并通过实际案例展示了如何根据应用需求进行线程池的优化配置。文章首先介绍了线程池的基本概念和核心参数,随后详细阐述了几种常见的线程池实现(如FixedThreadPool、CachedThreadPool、ScheduledThreadPool等)的特点及使用场景。接着,通过一个电商系统订单处理的实际案例,分析了线程池参数设置不当导致的性能问题,并提出了相应的优化策略。最终,总结了线程池优化的最佳实践,旨在帮助开发者更好地利用Java线程池提升应用性能和稳定性。 ####
|
1月前
|
安全 Java 数据库连接
Java中的异常处理:理解与实践
在Java的世界里,异常处理是维护代码健壮性的守门人。本文将带你深入理解Java的异常机制,通过直观的例子展示如何优雅地处理错误和异常。我们将从基本的try-catch结构出发,探索更复杂的finally块、自定义异常类以及throw关键字的使用。文章旨在通过深入浅出的方式,帮助你构建一个更加稳定和可靠的应用程序。
33 5
|
2月前
|
缓存 Java 开发者
Java多线程并发编程:同步机制与实践应用
本文深入探讨Java多线程中的同步机制,分析了多线程并发带来的数据不一致等问题,详细介绍了`synchronized`关键字、`ReentrantLock`显式锁及`ReentrantReadWriteLock`读写锁的应用,结合代码示例展示了如何有效解决竞态条件,提升程序性能与稳定性。
163 6
|
1月前
|
安全 Java 程序员
Java内存模型的深入理解与实践
本文旨在深入探讨Java内存模型(JMM)的核心概念,包括原子性、可见性和有序性,并通过实例代码分析这些特性在实际编程中的应用。我们将从理论到实践,逐步揭示JMM在多线程编程中的重要性和复杂性,帮助读者构建更加健壮的并发程序。
|
2月前
|
存储 缓存 安全
java 中操作字符串都有哪些类,它们之间有什么区别
Java中操作字符串的类主要有String、StringBuilder和StringBuffer。String是不可变的,每次操作都会生成新对象;StringBuilder和StringBuffer都是可变的,但StringBuilder是非线程安全的,而StringBuffer是线程安全的,因此性能略低。
65 8