`
shadow1582
  • 浏览: 6445 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

JAVA 随机数的理解

阅读更多

论坛引用:
1.我只要知道伪随机数用的是哪种算法,
就能准确的知道下一个数将是什么 PS:一个相面的如是说.
2.只有量子计算机才能产生真随机数
3.用时间做种子是不错的方法,time+CPUID+MAC

引用:http://gatusso52.iteye.com/blog/400090

1 两种方法 java.lang.Math.random()  与 java.util.Random

2 java.util.Random的两种构造发发

无参: 返回可正可负

long:种子

 

java.lang.Math.random()

返回0到1间

 

3 返回a到b间的随机数

 java.lang.Math.random() × (b-a+1) + a

new ava.util.Random() .nextInt(b-a) +a

 

4  java.util.Random 线程安全

 

5 java.util.Random如果同样的种子,则返回同样的随机数

java.util.Random rand1 = new java.util.Random(50);

java.util.Random rand2 = new java.util.Random(50);

int i1 = rand1.nextInt();

int i2 = rand2.nextInt();

则i1 == i2


引用:http://dev.csdn.net/article/62/62843.shtm
綠起:
想在J2ME中产生一个随机的潜艇出现的位置,其实也只需要一个Y坐标而已。用了nextInt方法,代码类似如下:,
奇怪的是要得到两个随机的数,得到的却是两个相同的数而已:当场

class T{
  int x;
  java.util.Random r=new java.util.Random();
  T() {
    x=(r.nextInt() >>> 1) %10; //产生一个0-9之间一个数、、、
  }
  int getT() {
    return this.x;//得到这个随机数
  }
}
public class TR {
  public static void main(String[] args) {  
    for(int i=0;i<2;i++) {     
      T t=new T();
      System.out.println(t.getT());//输出这个随机数,但结果很大程度上是一样的、、
    }   
  }
}

于是找到一些关于随机数的资料:
得到结论如下:
1。导致随机数一样的原因为:因为随机数用的是当前时间做随机种子,就是new Random(时间为种子的),所以程序出现的太快会出现一样的原因。

解决办法:
在产生随机数的时候让他隔个一段时间,如:
try {Thread.sleep(100);} catch(Exception e) {}
产生的就没有问题了。

关于随机数:
产生随机数的方法:
1。用Random()之后调用nextInt()来产生随机数,至于想要产生自己想要的范围就要做一下手脚 了,取正取模就可以了
    如:(rand.nextInt()>>>1 ) % 101
2。其实用nextInt()这个方法已经很老套了,而且如果一般用作产生一定范围的随机数的话(用上面的方法,取正取模),就会出现数值偏小的情况,所以JDK升级的版本的用法就为nextInt(100)产生0-100之间的随机数:
3。其实还有一个方法就是Math.random()来产生一个0-1之间的浮点数:之后你就可以*你要的范围了,取整就可以,这个方法可以有效的避免上面重复的问题,
4。手机上的用法:可惜的是J2ME只提供nextInt()不提供nextInt(范围)(MIDP2.0也不支持),更不支持Math.random我想主要是用到了浮点运算吧,我想手机还是用不了,(不知道为什么用nextInt(范围)WTK可以运行,(JbuilderX提示有这个方法?但是API里面又没有,同时如果用S60做DEVICE的话,这个地方会报错,其他的DEVICE不会报错,)但是在爱鸡6600上,通不过,呵呵,还好早发现这个问题,鸡6上又不报错,寒~~~)

总结:
一般最好用nextInt(范围)的,如果不是大量的运算的话,就可以用Math.random了,(因为他可以运算起来慢一些,浮点之后再取整),像我没有办法只好用第一个方法了

分享到:
评论

相关推荐

    (超赞)JAVA精华之--深入JAVA API

    1.1.2.1.3 随机数类Random 1.1.2.1.4 向量类Vector 1.1.2.1.5 栈类Stack 1.1.2.1.6 哈希表类Hashtable 1.1.2.1.7 位集合类BitSet Hashtable类 1.1.3 JAVA IO包 1.1.4 与时间有关的类Date,DateFormat,Calendar ...

    计算机程序设计(Java)-教案--单元二--Java语言开发基础.docx.docx

    工程1:猜数字游戏任务1:确定变量任务2:选择数据类型任务3:确定表达式 任务4:循环猜数,并统计次数 三、任务1・1:确定变量 任务分析 猜数游戏中需要计算机产生随机数,还需要用户输入猜测的数字。 本任务就是要确定...

    Java 循环语句练习题.docx

    这个练习题可以帮助读者理解随机数生成和循环语句的基本结构和使用方法。 知识点:随机数生成,循环语句,条件语句 六、计算 2000 年 1 月 1 日到 2008 年 1 月 1 日相距多少天。(注意闰年) 这个练习题旨在让...

    Java随机生成多张六位彩票.docx

    该资源介绍了如何利用随机数生成彩票,而且可以一次生成多张彩票,加强对随机数函数的理解应用。其中文档中有详细的代码解释了彩票的生成过程,买一注,或许会中奖哦!

    java生成图片的验证码工具类及其使用

    java生成验证码的工具类,这个现在有依赖可以直接引入调用,但这个工具类没有引入依赖,大家也容易看懂代码,理解其含义。也可直接去工具类中调整生成验证码的宽度、高度、颜色、背景颜色、生成的随机数数量、干扰线...

    JAVA SE学习精华集锦

    1.1.2.1.3 随机数类Random 11 1.1.2.1.4 向量类Vector 12 1.1.2.1.5 栈类Stack 13 1.1.2.1.6 哈希表类Hashtable 14 1.1.2.1.7 位集合类BitSet 15 Hashtable类 20 1.1.3 JAVA IO包 24 1.1.4 与时间有关的类Date,...

    Java的数学运算处理类讲解代码(BigDecimal、Math、Random、DecimalFormat类全部操作方法API)

    这个源码资源是一个讲解数学计算处理类的示例项目,旨在帮助开发者理解和使用Java中的数学计算相关类库。该项目包含详细的代码示例和注释,涵盖了以下几个主要的数学计算处理类:BigDecimal、Math、Random和...

    黑龙江大学面向对象程序设计Java实验讲义软件样本.doc

    4) 掌握java环境变量配备 5) 掌握Java循环控制语句和System.out.print、System.out.println办法使用 6) 掌握Java随机数办法和键盘输入类KeyInput使用 5.实验规定 1) 在修改源程序文献名时,测试源程序文献名与否...

    实验项目D、Java应用专题编程

    一、实验目的 ★专题:核心专题技术★ 1、理解枚举的使用。 2、掌握包装类及自动装箱拆箱机制。 3、掌握异常的使用。 4、掌握包的使用。...2.数有关类:数学Math类、随机数类Random、大数类 3.时日API 4.Java

    java课程设计猜数游戏课程设计报告.doc

    了解系统开发的需求分析 、层次设计、模块分解、编码测试、模块组装与整体调试的全过程,加深对Java的理解 与eclipse环境的使用:逐步熟悉程序设计的方法,并养成良好的编程习惯。 1.2 设计项目名称 猜数游戏设计 ...

    java j2ee 课程设计报告

    • 进一步加深对Java语言的理解和掌握:将所学的JAVA知识运用于实践中。 • 课程设计将理论与实践相结合,提供了一个既动手又动脑,独立实践的机会,锻炼我们的分析解决实际问题的能力,提高学生适应实际,实践编程...

    java范例开发大全源代码

     1.1 理解Java 2  1.2 搭建Java所需环境 3  1.2.1 下载JDK 3  1.2.2 安装JDK 4  1.2.3 配置环境 5  1.2.4 测试JDK配置是否成功 7  实例1 开发第一个Java程序 7  第2章 Java基础类型与运算符...

    Java范例开发大全 (源程序)

     1.1 理解Java 2  1.2 搭建Java所需环境 3  1.2.1 下载JDK 3  1.2.2 安装JDK 4  1.2.3 配置环境 5  1.2.4 测试JDK配置是否成功 7  实例1 开发第一个Java程序 7  第2章 Java基础类型与运算符(教学...

    java范例开发大全

    1.1 理解Java 2 1.2 搭建Java所需环境 3 1.2.1 下载JDK 3 1.2.2 安装JDK 4 1.2.3 配置环境 5 1.2.4 测试JDK配置是否成功 7 实例1 开发第一个Java程序 7 第2章 Java基础类型与运算符(教学视频:39分钟) 9 2.1 基础...

    Java程序设计基础:一维数组应用数组作为方法形参.pptx

    理解数组作为方法形参,方法体内数组的使用 复习:方法定义的语法 数组作为方法的形参 修饰符 返回值类型 方法名(参数列表){ //方法体 } 基本类型 引用类型 基本类型 引用类型 任务:编写方法实现下列一维数组的...

    java课程设计指导书.doc

    通过课程设计各个项目的综合训练,加强学生 对JAVA语言的理解,检验学生对专业理论知识理解与掌握的程度.锻炼学生综合运用JA VA 程序设计处理所学的知识实际分析问题、解决问题的能 为导向,从可行性研究开始,经过...

    java猜数字游戏课程设计.doc

    通过课程设计各个项目的综合训练,加强学生对JAVA语言的理 解,检验学生对专业理论知识理解与掌握的程度,锻炼学生综合运用JAVA程序设计处理 所学的知识实际分析问题、解决问题的能力。 通过对猜数游戏程序设计的...

    Java范例开发大全(全书源程序)

    1.1 理解Java 2 1.2 搭建Java所需环境 3 1.2.1 下载JDK 3 1.2.2 安装JDK 4 1.2.3 配置环境 5 1.2.4 测试JDK配置是否成功 7 实例1 开发第一个Java程序 7 第2章 Java基础类型与运算符 实例2 自动提升 9 实例...

    java范例开发大全(pdf&源码)

    1.1 理解Java 2 1.2 搭建Java所需环境 3 1.2.1 下载JDK 3 1.2.2 安装JDK 4 1.2.3 配置环境 5 1.2.4 测试JDK配置是否成功 7 实例1 开发第一个Java程序 7 第2章 Java基础类型与运算符(教学视频:39分钟) 9 2.1 基础...

    java项目_吃豆豆_源码及文档

    安排本练习的主要目的理解面向对象、能够用面向对象的思路去思考问题,结合Swing和现成的知识完成本项目。 二、 实现要求 使用面向对象的方式,完成本项目。 三、 实现技术 a) 熟练使用if、for等语句进行逻辑操作。 ...

Global site tag (gtag.js) - Google Analytics