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. bzoj1101

    1101: [POI2007]Zap Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2319  Solved: 936[Submit][Status] ...

  2. TCP/IP协议与Http协议的区别

    转自:https://www.cnblogs.com/xianlei/p/tcpip_http.html TPC/IP协议是传输层协议,主要解决数据如何在网络中传输,而HTTP是应用层协议,主要解决如 ...

  3. ASP.NET Core MVC 打造一个简单的图书馆管理系统 (修正版)(一) 基本模型以及数据库的建立

    前言: 本系列文章主要为我之前所学知识的一次微小的实践,以我学校图书馆管理系统为雏形所作. 本系列文章主要参考资料: 微软文档:https://docs.microsoft.com/zh-cn/asp ...

  4. Ruby IO类

    更新: 2017/06/23   表格大小全部改为100%                             文件输入输出的File....系列函数的文件名参数是字符串! 更新: 2017/06 ...

  5. bzoj 1661: [Usaco2006 Nov]Big Square 巨大正方形【枚举】

    每句两个顶点确定正方形,取max即可 #include<iostream> #include<cstdio> using namespace std; int n,x,y,s, ...

  6. bzoj 4184: shallot【线性基+时间线段树】

    学到了线段树新姿势! 先离线读入,根据时间建一棵线段树,每个节点上开一个vector存这个区间内存在的数(使用map来记录每个数出现的一段时间),然后在线段树上dfs,到叶子节点就计算答案. 注意!! ...

  7. P5107 能量采集

    传送门 官方题解 话说最后的答案忘记取模了结果连暴力都挂了可海星-- //minamoto #include<bits/stdc++.h> #define R register #defi ...

  8. Pycharm的安装教学

    Python环境搭建—安利Python小白的Python和Pycharm安装详细教程 人生苦短,我用Python.众所周知,Python目前越来越火,学习Python的小伙伴也越来越多.最近看到群里的 ...

  9. 有了Git这些操作,我再也不怕开发了!

    Git 是什么? Git 是一个分布式的代码管理容器,本地和远端都保有一份相同的代码. Git 仓库主要是由是三部分组成:本地代码,缓存区,提交历史. Git 有哪些常规操作? Git的常规操作你了解 ...

  10. ROS学习笔记一:ROS安装与测试

    1 Ubuntu和ROS版本的对应关系 Ubuntu 和 ROS 都存在不同的版本,其对应关系如下: 注:如果Ubuntu版本和ROS版本不对应的话,安装就不会成功了- 笔者安装的是Ubuntu14. ...