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 都做了比较详细的说明,并且将随机数的特性以及实现思路也做了一些简单的分析,帮助大家明白为何会有这么多的随机数算 ...
随机推荐
- gerrit使用总结
1. 前言 最近在摸索git + gerrit代码审核的工作模式,需要安装gerrit服务器,经过一阵折腾,走了不少弯路,在此做下笔记,以便自己或者他人参考.有误的地方请指教. 我的环境如下: 环境 ...
- python3中digest()和hexdigest()区别
hashlib是涉及安全散列和消息摘要,提供多个不同的加密算法接口,如SHA1.SHA224.SHA256.SHA384.SHA512.MD5等. 其中 hash.digest() 返回摘要,作为二进 ...
- 转载:百为STM32开发板教程之十二——NAND FLASH
http://bbs.21ic.com/icview-586200-1-1.html 百为STM32开发板教程之十二——NAND FLASH 参考资料:百为stm32开发板光盘V3\百为stm32开发 ...
- E20180218-hm-xa
更新: 2019/02/19 原来忘记分类,把此博文归入单词类 vocabulary n. (某一语言的) 词汇; (尤指外语教科书中附有释义的) 词汇表; grammar n. 语法; 语法书; ...
- GIT 初始化 user.name user.email
git config --global user.name "username" git config --global user.email "email"
- bzoj P1979 华容道【bfs+spfa】
调死我了-- 首先观察移动方式,需要移动的格子每次移动到相邻格子,一定是先把空白格子挪过去,所以我们得到一种做法,就是bfs预处理出每一个格子的四联通格子之间的空白格子移动距离建边,注意这个移动是不能 ...
- hdu 1071 The area【定积分】
用顶点式\( a(x-h)^2+k=y \)解方程,转化为\(ax^2+bx+c=y \)的形式,然后对二次函数求定积分\( \frac{ax^3}{3}+\frac{bx^2}{2}+cx+C \) ...
- POJ 1258 Agri-Net(Prim求最小生成树)
Agri-Net Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 64912 Accepted: 26854 Descri ...
- 12c debug 转 12C 连接CDB和PDB
来源:David Dai -- Focus on Oracle 连接到CDB 12c debug 和普通实例一样的连接. 指定ORACLE_SID 以后可以使用OS认证,也可以使用密码进行连接. [o ...
- Vue.js学习笔记--1.基础HTML和JS属性的使用
整理自官网教程 -- https://cn.vuejs.org/ 1. 在HTML文件底部引入Vue <script src="https://cdn.jsdelivr.net/npm ...