JAVA取随机数的三种方式:

  1. Math.random()
  2. System.currentTimeMillis()
  3. 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个随机数的三种方法:

  1. 双重循环去重法
  2. HashSet
  3. 排除已随机的数法
 /**
* 取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随机数使用的更多相关文章

  1. Java 随机数

    本章先讲解Java随机数的几种产生方式,然后通过示例对其进行演示. 广义上讲,Java中的随机数的有三种产生方式:(01). 通过System.currentTimeMillis()来获取一个当前时间 ...

  2. 学习记录 java随机数的产生机制

    java 随机数 一.在j2se里我们可以使用Math.random()方法来产生一个随机数,这个产生的随机数是0-1之间的一个double,我们可以把他乘以一定的数,比如说乘以100,他就是个100 ...

  3. Java随机数

    本章先讲解Java随机数的几种产生方式,然后通过示例对其进行演示. 广义上讲,Java中的随机数的有三种产生方式:(01). 通过System.currentTimeMillis()来获取一个当前时间 ...

  4. java随机数与数组的使用。

    java随机数与数组的使用.    一:题目 二 代码:  public class Students {    int number;  // 学号    int State ;   // 年级   ...

  5. Java随机数和UUID

    Java随机数和UUID Java随机数 在Java项目中通常是通过Math.random方法和Random类来获得随机数,前者通过生成一个Random类的实例来实现. 此类产生的是一组伪随机数流,通 ...

  6. java 随机数高效生成

    分享牛,分享牛原创.近期去面试经常被问到java如何生产随机数,以及生成很大的字符串保证不能重复,还要考虑性能,之前本人面试别人的时候,可能不会问这个问题.既然这个java随机数问题经常被问到,那咱们 ...

  7. (转)Java随机数

    1 随机数的三种产生方式 本章先讲解Java随机数的几种产生方式,然后通过示例对其进行演示. 广义上讲,Java中的随机数的有三种产生方式: (01). 通过System.currentTimeMil ...

  8. java 随机数 <%=System.currentTimeMillis() %>

    java 随机数<c:set var="version" value="<%=System.currentTimeMillis() %>"/& ...

  9. 硬核 - Java 随机数相关 API 的演进与思考(上)

    本系列将 Java 17 之前的随机数 API 以及 Java 17 之后的统一 API 都做了比较详细的说明,并且将随机数的特性以及实现思路也做了一些简单的分析,帮助大家明白为何会有这么多的随机数算 ...

  10. 硬核 - Java 随机数相关 API 的演进与思考(下)

    本系列将 Java 17 之前的随机数 API 以及 Java 17 之后的统一 API 都做了比较详细的说明,并且将随机数的特性以及实现思路也做了一些简单的分析,帮助大家明白为何会有这么多的随机数算 ...

随机推荐

  1. 思维导图js

    http://baike.baidu.com/view/1469162.htm?fromenter=Mind+Maps

  2. IJ:目录

    ylbtech-IJ:目录 1.返回顶部   2.返回顶部   3.返回顶部   4.返回顶部   5.返回顶部     6.返回顶部   7.返回顶部   8.返回顶部   9.返回顶部   10. ...

  3. Ceph之对象存储网关RADOS Gateway(RGW)

    一.Ceph整体架构及RGW在Ceph中的位置 1.Ceph的整体架构 Ceph是一个统一的.分布式的的存储系统,具有优秀的性能.可靠性和可扩展性.Ceph支持对象存储(RADOSGW).块存储(RB ...

  4. 【WIP】Ruby JSON

    创建: 2018/03/22 以后有空补上 注: JSON.generate 参数只能是Obejct或者Array, 不可以是Hash https://docs.ruby-lang.org/ja/la ...

  5. spoj 839 OPTM - Optimal Marks&&bzoj 2400【最小割】

    因为是异或运算,所以考虑对每一位操作.对于所有已知mark的点,mark的当前位为1则连接(s,i,inf),否则连(i,t,inf),然后其他的边按照原图连(u,v,1),(v,u,1),跑最大流求 ...

  6. js 调试方法两种

    JS的错误捕获一般有下面两种方式: 1. 异常捕获常用方法是 try/catch/ throw /finally 2. 全局捕获window.onerror 1. try/catch/throw/fi ...

  7. Akka源码分析-Akka Typed

    对不起,akka typed 我是不准备进行源码分析的,首先这个库的API还没有release,所以会may change,也就意味着其概念和设计包括API都会修改,基本就没有再深入分析源码的意义了. ...

  8. 转 ORACLE-016:ora-01720 授权选项对于'xxxx'不存在

    报错的情形如下, A用户:视图V_A B用户:视图V_B,并且用到了V_A C用户:需要用V_B, 授权过程, A用户下: grant select on V_A to B B用户下: grant s ...

  9. 一个简单的jsp+servlet登录界面的总结

    这个登录界面我是用eclipse+tomcat7来实现的(网上比较多都是用myeclipse来做的) 1.首先是关于servlet部署的问题 首先你的servlet类要写在WEB-INF的Class文 ...

  10. [转]查询表达式 (F#)

    本文转自:http://msdn.microsoft.com/zh-cn/library/hh225374.aspx 查询表达式可以查询数据源并将数据是一种预期形式.             查询表达 ...