Java随机数使用
JAVA取随机数的三种方式:
- Math.random()
- System.currentTimeMillis()
- random.nextInt()
废话不多说,看代码:
/**
*取单个随机数
*Math.random()取10~100之间随机数
*Math.round()进行向上取整处理=>{3.5=>4}、{-3.5=>-3}
*
**/
@Test
public void test1(){
int max=100;
int min=10;
int randomNumber = (int) Math.round(Math.random()*(max-min)+min);
System.out.println("10~100之间随机数:"+randomNumber);
}
/**
* 取单个随机数
* System.currentTimeMillis()返回从1970年1月1号0点0分0秒到目前的一个long型的毫秒数
* 通过取模,限制随机数范围
* */
@Test
public void test2(){
int max=100;
int min=10;
long randomNum = System.currentTimeMillis();
int randomNumber = (int)(randomNum%(max-min))+min;
System.out.println("10~100之间随机数:"+randomNumber);
}
/**
* 取单个随机数
* Random是一个随机数发生器
* 有两种构造函数:Random()使用当前时间即System.currentTimeMillis()作为发生器的种子
* Random(long seed)使用指定的seed作为发生器的种子
* 再通过nextInt()、 nextLong()、nextFloat()、nextDouble()等获得不同类型随机数
* */
@Test
public void test3(){
int max=100;
int min=10;
Random random = new Random();
int randomNumber = random.nextInt(max)%(max-min+1) + min;
System.out.println("10~100之间随机数:"+randomNumber);
}
JAVA取N个随机数的三种方法:
- 双重循环去重法
- HashSet
- 排除已随机的数法
/**
* 取N个不同的随机数
* 1.双重循环去重法
* 进过第一重循环取值,另一重进行比较,去重
* */
public int[] randomCommon1(int min ,int max , int n){
int[] result = new int[n];
if(n>max-min+1||min>max){
return null;
}
int count = 0;//记录数量
while(count<n){
int randomNumber = (int) Math.round(Math.random()*(max-min)+min);
boolean falg = true;
for(int i=0;i<n;i++){
if(randomNumber == result[i]){
falg = false;
break;
}
}
if(falg){
result[count] = randomNumber;
count++;
}
}
return result;
}
/**
* 取N个不同的随机数
* 2.HashSet
* 使用HashSet只允许存放不同值原理
* */
public void randomCommon2(int min,int max,int n,HashSet<Integer> set){
if(n>max-min+1||min>max){
return;
}
int randomNumber = (int) Math.round(Math.random()*(max-min)+min);
set.add(randomNumber);
if(set.size()<n){
randomCommon2(min,max,n,set);//递归
}
}
/**
* 取N个不同的随机数
* 3.排除已随机的数
* */
public static int[] randomArray(int min,int max,int n){
int len = max-min+1; if(max < min || n > len){
return null;
} //初始化给定范围的待选数组
int[] source = new int[len];
for (int i = min; i < min+len; i++){
source[i-min] = i;
} int[] result = new int[n];
Random rd = new Random();
int index = 0;
for (int i = 0; i < result.length; i++) {
//待选数组0到(len-2)随机一个下标
index = Math.abs(rd.nextInt() % len);
len--;//始终保持取值范围缩小,并保持替换值在改变
//将随机到的数放入结果集
result[i] = source[index];
//将待选数组中被随机到的数,用待选数组(len-1)下标对应的数替换
source[index] = source[len];
}
return result;
} @Test
public void Test(){
//方法1:
int[] result1 = randomCommon1(0,10,5);
for(int i:result1){
System.out.print(i+"#");
}
System.out.println();
//方法2:
HashSet<Integer> set = new HashSet<Integer>();
randomCommon2(0,10,5,set);
for(int i:set){
System.out.print(i+"#");
}
System.out.println();
//方法3:
int[] result3=randomArray(0,10,5);
for(int i:result3){
System.out.print(i+"#");
}
}
结果:
9#6#4#3#10#
1#4#8#9#10#
10#9#4#0#5#
Java随机数使用的更多相关文章
- Java 随机数
本章先讲解Java随机数的几种产生方式,然后通过示例对其进行演示. 广义上讲,Java中的随机数的有三种产生方式:(01). 通过System.currentTimeMillis()来获取一个当前时间 ...
- 学习记录 java随机数的产生机制
java 随机数 一.在j2se里我们可以使用Math.random()方法来产生一个随机数,这个产生的随机数是0-1之间的一个double,我们可以把他乘以一定的数,比如说乘以100,他就是个100 ...
- Java随机数
本章先讲解Java随机数的几种产生方式,然后通过示例对其进行演示. 广义上讲,Java中的随机数的有三种产生方式:(01). 通过System.currentTimeMillis()来获取一个当前时间 ...
- java随机数与数组的使用。
java随机数与数组的使用. 一:题目 二 代码: public class Students { int number; // 学号 int State ; // 年级 ...
- Java随机数和UUID
Java随机数和UUID Java随机数 在Java项目中通常是通过Math.random方法和Random类来获得随机数,前者通过生成一个Random类的实例来实现. 此类产生的是一组伪随机数流,通 ...
- java 随机数高效生成
分享牛,分享牛原创.近期去面试经常被问到java如何生产随机数,以及生成很大的字符串保证不能重复,还要考虑性能,之前本人面试别人的时候,可能不会问这个问题.既然这个java随机数问题经常被问到,那咱们 ...
- (转)Java随机数
1 随机数的三种产生方式 本章先讲解Java随机数的几种产生方式,然后通过示例对其进行演示. 广义上讲,Java中的随机数的有三种产生方式: (01). 通过System.currentTimeMil ...
- java 随机数 <%=System.currentTimeMillis() %>
java 随机数<c:set var="version" value="<%=System.currentTimeMillis() %>"/& ...
- 硬核 - Java 随机数相关 API 的演进与思考(上)
本系列将 Java 17 之前的随机数 API 以及 Java 17 之后的统一 API 都做了比较详细的说明,并且将随机数的特性以及实现思路也做了一些简单的分析,帮助大家明白为何会有这么多的随机数算 ...
- 硬核 - Java 随机数相关 API 的演进与思考(下)
本系列将 Java 17 之前的随机数 API 以及 Java 17 之后的统一 API 都做了比较详细的说明,并且将随机数的特性以及实现思路也做了一些简单的分析,帮助大家明白为何会有这么多的随机数算 ...
随机推荐
- 无参数的lambda匿名函数
lambda 语法: lambda [arg1[,arg2,arg3....argN]]:expression 1.单个参数的: g = lambda x:x*2 print g(3) 结果是6 2. ...
- hdu 3333(树状数组 + 离线操作)
Turing Tree Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- 云-腾讯云:视频解决方案-un
ylbtech-云-腾讯云:视频解决方案 一站式视频解决方案,包含直播.点播.互动直播.云通信等产品:发布网络覆盖全球.海量转码设备.数十年深厚音视频技术积淀. 1.返回顶部 2.返回顶部 3 ...
- css3 vw -----解决页面滚动出现跳动的bug
100vw相对于浏览器的window.innerWidth,是浏览器的内部宽度,注意,滚动条宽度也计算在内!而100%是可用宽度,是不含滚动条的宽度. demo: h1{font-size:8vw;} ...
- 在IDEA里gradle配置和使用
在IDEA里gradle配置和使用 在IDEA里gradle配置和使用 前言 Windows环境IDEA配置gradle 配置系统环境变量 下载 配置环境变量 测试 idea配置 gradle仓库设置 ...
- 选择排序 分类: 算法 c/c++ 2014-10-10 20:32 509人阅读 评论(0) 收藏
选择排序(假设递增排序) 每次选取从当前结点到末尾结点中最小的一个与当前结点交换,每一轮固定一个元素位置. 时间复杂度O(n^2),空间复杂度O(1).下面的示例代码以带头结点的链表为存储结构: #i ...
- AJPFX关于网络编程的理解
1:网络编程(理解) (1)网络编程:用Java语言实现计算机间数据的信息传递和资源共享 (2)网络编程模型 (3)网络编程的三要素 ...
- css3中的变换、动画和过渡
变换:分为2d变换和3d变换,但一次只能用一个变换属性,多个的话最后一个会覆盖前面所有最终被浏览器实现,变换可以成为过渡和动画的一个待变参数(类似width,opacity等). 过渡:是动画的初始模 ...
- Jboss服务器使用
一.作者前言 早上坐地铁的时候,阅览about JAVA.了解到一个程序猿,对于服务器的使用,最起码的熟悉那么几种,例如tomcat,jboss,weblogic,websphere,还有Nginx. ...
- CSS定位内容
div.h1 或 p 元素常常被称为块级元素.这意味着这些元素显示为 一块内容,即“块框”.与之相反,span 和 strong 等元素称为“行 内元素”,这是因为它们的内容显示在行中,即 ...