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

java 随机数

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

二.在java.util这个包里面提供了一个Random的类,我们可以新建一个Random的对象来产生随机数,他可以产生随机整数、随机float、随机double,随机long,这个也是我们在j2me的程序里经常用的一个取随机数的方法。

三.在我们的System类中有一个currentTimeMillis()方法,这个方法返回一个从1970年1月1号0点0分0秒到目前的一个毫秒数,返回类型是long,我们可以拿他作为一个随机数,我们可以拿他对一些数取模,就可以把他限制在一个范围之内啦

在java中,我们可以通过两种方式来获取随机数(generating a random number)一种是大家熟悉的java.lang.Math.Random()静态方法,另一种是创建java.util.Random对象。下面是两种方法的使用过程:

1.java.lang.Math.random()    在使用这一静态方法的时候,我们不需要import任何包,因为java.lang.*包是默认载入的,下面举例说面使用方法:
1 double i=Math.random();//random()会自动产生一个0.0-1.0的双精度随机数
2         System.out.println(i);//输出
3         System.out.println();
4         i=Math.random()*1000;//产生0-1000的双精度随机数
5         System.out.println(i);
6         System.out.println();
7         int b=(int)(Math.random()*1000);//产生0-1000的整数随机数
8         System.out.println(b);

2.创建java.util.Random对象
 1 package com.hanqi;
 2 import java.util.Random;
 3 public class Test3 {
 4
 5     public static void main(String[] args) {
 6
 7         Random random=new Random();//创建random对象
 8         int intNumber=random.nextInt();//获取一个整型数
 9         float floatNumber=random.nextFloat();//获取一个浮点数(0-1)
10         double doubleNumber=random.nextDouble();//获取双精度数(0-1)
11         boolean booleanNumber=random.nextBoolean();//获取boolean数
12         System.out.println("intNumber:"+intNumber);
13         System.out.println("floatNumber:"+floatNumber);
14         System.out.println("doubleNumber:"+doubleNumber);
15         System.out.println("booleanNumber:"+booleanNumber);
16
17     }
18
19 }


random在产生随机数的时候使用当前的时间作为基数,我们可以同过System.currentTimeMillis()来获取这个基数。当然我们也可以指定基数:

Random random=new Random(100);

同一基数所产生的随机数序列是一样的,可以用下面这一段程序进行印证:

 1 package com.hanqi;
 2 import java.util.Random;
 3 public class Test3 {
 4
 5     public static void main(String[] args) {
 6
 7         Random random1=new Random(100);
 8         Random random2=new Random(100);
 9         for(int i=0;i<5;i++){
10             System.out.print(random1.nextInt()+"\t");
11             System.out.println(random2.nextInt()+"\t");
12             System.out.println("---------------------------------");

				
时间: 2024-08-04 18:18:32

学习记录 java随机数的产生机制的相关文章

学习记录 java 值类型和引用类型的知识

1. Java中值类型和引用类型的不同? [定义] 引用类型表示你操作的数据是同一个,也就是说当你传一个参数给另一个方法时,你在另一个方法中改变这个变量的值, 那么调用这个方法是传入的变量的值也将改变.值类型表示复制一个当前变量传给方法, 当你在这个方法中改变这个变量的值时,最初生命的变量的值不会变.通俗说法: 值类型就是现金,要用直接用:引用类型是存折,要用还得先去银行取现.----(摘自网上) [值类型] 也就是基本数据类型 基本数据类型常被称为四类八种 四类: 1,整型 2,浮点型 3,字

记录Java的垃圾回收机制和几种引用

一.Java的垃圾回收机制 Java的垃圾回收机制(java garbage collection)是Java虚拟机提供的能力,用于在空闲时间以不定时的方式动态回收无任何引用的对象占据的堆内存空间. 注意粗体字的地方,java的垃圾回收线程是优先级比较低的线程,什么时候进行垃圾回收难以确定.当某些对象被标记为垃圾对象后,等垃圾回收线程运行时,就会将这些对象回收(确切的说应该是回收这些对象所占的堆内存空间). 二.什么样的对象会被标记成垃圾对象呢? 一般来说,所有指向对象的引用都已失效,不可能再有

JVM学习记录-Java内存模型(二)

对于volatile型变量的特殊规则 关键字volatile可以说是Java虚拟机提供的最轻量级的同步机制. 在处理多线程数据竞争问题时,不仅仅是可以使用synchronized关键字来实现,使用volatile也可以实现. Java内存模型对volatitle专门定义了一些特殊的访问规则,当一个变量被定义为volatile时,它将具备以下两个特性: 第一个是保证此变量对所有线程的可见性,这里的“可见性”是指当一条线程修改了这个变量的值,新值对于其他线程来说是可以立即得知的.而普通变量不能做到这

我的学习记录-JAVA SE 01

一.大纲 一.IT和计算机 1.IT的前世今生 第五代       DT时代 2.操作系统和平台的相关性 1)OS所处位置: 2)unix家族 3)windows家族 3.windows常用快捷键/命令 二.计算机很二 1.太极和八怪 1)太极 2)八卦 3)六十四卦 2.进制概述 进制也就是进位制,是人们规定的一种进位方法. 对于任何一种进制---X进制,就表示某一位置上的数运算时是逢X进一位. 十进制是逢十进一,十六进制是逢十六进一,二进制就是逢二进一,以此类推,x进制就是逢x进位. 1)二

学习记录 java session保存用户登录

1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"&g

学习记录 java 哈希

哈希表(Hash Table,又叫散列表),是存储键值对(Key-value)的表,之所以不叫它Map(键值对一起存储一般叫做Map),是因为它下面的特性:它能把关键码(key)映射到表中的一个位置来直接访问,这样访问速度就非常快.其中的映射函数称为散列函数(Hash function). 1) 对于关键字key, f(key)是其存储位置,f则是散列函数 2) 如果key1 != key2 但是 f(key1) == f(key2),这种现象称为冲突(collison).冲突不可避免,这是因为

我的学习记录-JAVA SE 04

(三)流程语句 3.控制循环结构 1)break * 在switch语句中,用来终止一个语句序列. * 用于退出一个循环,使用break语句直接抢修退出循环,忽略循环体中任何其他语句和循环条件测试. * 在循环中遇到break语句时,循环被终止,程序控制在循环后面的语句重新开始. 实例: package day4; import java.util.Scanner; public class Exam_1 { public static void main(String[] args) { //

学习记录 java 链表知识

01.import java.util.HashMap; 02.import java.util.Scanner; 03.import java.util.Stack; 04. 05./** 06. * 07. * @author kerryfish 08. * 关于java中链表的操作 09. * 1. 求单链表中结点的个数: getListLength 10. * 2. 将单链表反转: reverseList(遍历),reverseListRec(递归) 11. * 3. 查找单链表中的倒数

学习记录 java泛型资料

java泛型资料: 1. 概述在引入范型之前,Java类型分为原始类型.复杂类型,其中复杂类型分为数组和类.引入范型后,一个复杂类型就可以在细分成更多的类型.例如原先的类型List,现在在细分成List<Object>, List<String>等更多的类型.注意,现在List<Object>, List<String>是两种不同的类型,他们之间没有继承关系,即使String继承了Object.下面的代码是非法的    List<String>