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. bzoj 4555: [Tjoi2016&Heoi2016]求和【NTT】

    暴力推式子推诚卷积形式,但是看好多blog说多项式求逆不知道是啥.. \[ \sum_{i=0}^{n}\sum_{j=0}^{n}S(i,j)*2^j*j! \] \[ S(i,j)=\frac{1 ...

  2. quickpow || 快速幂

    洛谷例题 推荐自行脑补:百度百科 如果  ,那么 : 前言:快速幂就是快速算底数的n次幂.其时间复杂度为 O(log₂N), 与朴素的O(N)相比效率有了极大的提高. 拿题目样例 Input :2 1 ...

  3. 《Windows核心编程系列》二十谈谈DLL高级技术

    本篇文章将介绍DLL显式链接的过程和模块基地址重定位及模块绑定的技术. 第一种将DLL映射到进程地址空间的方式是直接在源代码中引用DLL中所包含的函数或是变量,DLL在程序运行后由加载程序隐式的载入, ...

  4. 图论/暴力 Codeforces Beta Round #94 (Div. 2 Only) B. Students and Shoelaces

    题目传送门 /* 图论/暴力:这是个连通的问题,每一次把所有度数为1的砍掉,把连接的点再砍掉,总之很神奇,不懂:) */ #include <cstdio> #include <cs ...

  5. Ghost系统操作记录

    1.下载Symantec Ghost应用. 2.下载老毛桃PE工具箱. 3.利用老毛桃PE工具箱制作启动U盘. 4.拷贝Ghost应用至U盘. 5.设置计算机启动顺序为U盘启动. 6.重启计算机进入P ...

  6. 08 H5新增input元素

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  7. IOS应用开发版本控制工具之Versions使用,iosversions

    Versions版本控制工具破解版(Versions.zip)下载请见本博文附件.下载后在MAC安装完以后,图标是莲花状.见下图: 双击运行如下图:    点击Repository,连接SVN服务器R ...

  8. 转】R利剑NoSQL系列文章 之 Hive

    原博文出自于: http://blog.fens.me/category/%E6%95%B0%E6%8D%AE%E5%BA%93/page/3/ 感谢! Posted: Jul 27, 2013 Ta ...

  9. WindowForm.计算器

    设计计算器: 外部变量: 数字键按钮: 运算符按钮事件代码: 清零按钮 等号按钮: 思维导图:

  10. AJPFX关于异常和file类的总结

    /** * 各位坛友注意啦!对我这个帖子有任何的疑惑的,可以尽管留帖提问,我会在看到的第一时间回贴,既然写得出这帖子,* 就要对看这帖子的人负责,所以有问题,尽管问!* * * 这块没学好的同学,可以 ...