- 浏览: 214591 次
- 性别:
文章分类
- 全部博客 (213)
- jsp (2)
- 数据库 (3)
- photoshop cs4破解 (0)
- 关闭windows更新 (1)
- myeclipes开发经验总结 (1)
- 再次探究Unicode与ASCII编码 (1)
- hp probook 4411s电脑在用光盘安装时没有镜像问题 (1)
- hp probook 4411s电脑在xp系统下安装快捷键的问题 (1)
- 关于双系统和三系统的安装 (1)
- win7下个性化透明度的修改 (1)
- 原型开发工具axure (1)
- 将数据库表间关系导入到visio (1)
- word中自动生成目录 (1)
- 数据库日志文件已满的处理方法及更改数据库日志文件大小的方法 (1)
- 关于数据库语句insert的总结 (1)
- SQL Server2005创建登录名 (1)
- 登录名登陆时出现无法打开用户默认数据库登录失败 (1)
- 登录名登陆时出现 sql server 2005 sa登录报错:已成功与服务器建立连接,但是在登录过程中发生错误。 (1)
- 对于在写文章时标号的使用 (0)
- 对于论文word排版的技巧 (1)
- 求职简历的书写 (1)
- 惠普HP 4411s拆机 图文教程 (适用于4411s、4410s、4416s、4510s、4311s拆机) (1)
- 学术论文各部分的写作要求与写作方法 (1)
- 毕业论文的规范 (1)
- 对于在写文章时标号的使用(学术性论文) (0)
- 对于在写论文时标号的使用(学术性论文以及毕业论文) (1)
- 终止正要运行的程序 (1)
- : Address already in use: JVM_Bind (端口被占用) (1)
- 关于用myeclipes开发jsp程序时的问题 (1)
- 在连接数据库时出现此驱动程序不支持 Java Runtime Environment (JRE) 1.6 版。请使用支持 JDBC 4.0 (1)
- 关于数据表命名以及在网页中显示的图片命名问题 (1)
- 关于jsp中数据库的连接问题 (1)
- win7下建立无线网络(一网多人共享) (1)
- Adobe dreamweaver cs5 photoshop cs5的破解文件以及注册号 (0)
- Windows 使用技巧之WinZIP密码破解 (1)
- 破解WINRAR以及去除购买提示的方法 (1)
- win7激活 (0)
- win7(ultimate)激活 (0)
- 去除windows7安全提示的方法 (1)
- u盘上的操作系统(winpe的制作) (1)
- 将数据库表间关系导出到visio (1)
- css+div中三列自适应宽度问题 (1)
- css+div小小总结 (1)
- Adobe dreamweaver cs5 photoshop cs5的破解文件 以及注册号 (0)
- 每次开机都会出现 “C:\WINDOWS\system32\source\系统程序勿删除.vbs ” (1)
- sql server 2005中int char varchar nvarchar 的区别 (1)
- dos命令以及制作.bat文件 (1)
- 一键清理系统垃圾.bat文件 (1)
- jsp的email功能 (1)
- 数据库连接池 (1)
- JAVA_HOME和TOMCAT_HOME (1)
- 查看计算机的网络信息 (1)
- 关于jcreator的问题 (1)
- java中main函数的作用 (1)
- 堆和栈的区别 (1)
- 连接数据库sql server 2005时端口的问题 (1)
- 对于html中form表单的认识 (1)
- 连接数据库驱动时的.newInstance() (1)
- Displaytag详解 (1)
- xml文件的配置 (1)
- server.xml文件的配置 (1)
- tomcat中conf中的context.xml的配置 (1)
- Web.xml文件配置详解 (1)
- tomcat 7: IllegalArgumentException: taglib definition not consistent with specification version (1)
- 数据库中创建自增列 (1)
- jsp中的分页问题 (1)
- 在jsp中null与("")的区别 (1)
- servlet中不同页面中传值的四种方式 (1)
- jsp中标签库的使用 (1)
- 广播域与冲突域 (1)
- Java容器类List、ArrayList、Vector及map、HashTable、HashMap分别的区别 (1)
- this的小问题 (1)
- 虚函数和虚基类、纯虚函数、抽象类抽象方法 ,动态绑定 (1)
- Overload和Override的区别 (1)
- NumberFormatException异常 (1)
- 在编程时的两个小问题 (1)
- 关于将数据库中的数据返回list的问题 (1)
- java ee 13种技术规范 (0)
- java ee 13种技术(规范) (1)
- JSP和Struts解决用户安全退出问题 (1)
- cookie的安全性问题 (1)
- 数据库操作返回值的问题 (1)
- java产生随机数 (1)
- 关于NoClassDefFoundError异常的问题 (1)
- java中的大树问题 (0)
- java中的大数问题 (1)
- NumberFormatException错误 (1)
- 两个小技巧 (0)
- 几个个网络中查看一些值(ip (1)
- arp (1)
- tcp (1)
- udp (1)
- mac等)小技巧 (1)
- js的使用小知识点 (1)
- myeclipse破解 (0)
- myeclipse编译问题 (1)
- servlet的部署问题 (1)
- 关于编码知识以及中文乱码的解决方案 (1)
- 关于javac与java命令的一个小问题 (1)
- css与div的比较 (1)
- 在写存储过程中注意的问题 (1)
- 项目开发中的几点规范 (1)
- java转义字符 (1)
- 移动字幕 (1)
- 动态网站功能模块介绍 (1)
- 什么是ajax (1)
- 图片查看器以及图片轮换代码收集 (1)
- 网站中的日历汇总 (1)
- javax.servlet.ServletException: File "/up.jsp" not found (1)
- 验证码 (1)
- jsp的几个小问题 (1)
- Jcreator Pro 4.50注册码 (1)
- javabean的自动生成 (1)
- res.sendRedirect()和req.getRequestDispatcher().forward(req (1)
- res)的区别 (1)
- 用displaytag组件实现分页详解 (1)
- 将已有项目导入myeclipse中 (1)
- uri url urn的原理及java实现 (1)
- java中object(String)类型转换为int (1)
- 对于out.print、out.println、out.write的理解 (1)
- 静态生成 (1)
- 获取字符串的特定字符 (1)
- 异常详细信息: System.Data.SqlClient.SqlException: 将截断字符串或二进制数据 (1)
- 把字符类型转换成时间类型 (1)
- The method getRealPath(String) from the type ServletRequest is deprecated (1)
- java中对于文件操作的总结 (1)
- servlet用jspsmart上传的时候获得pageContext对象 (1)
- jspSmartUpload上传下载 (1)
- 关于用jspSmartUpload控件上传文件并附带参数 (1)
- 关于数据库字段的设计 (1)
- 关于数据库的主外键 (1)
- 数据库的使用 (1)
- 让页面加载前执行js等事件 (1)
- JS页面跳转 (1)
- 有关于jsp中的包含页面 (1)
- 关于textarea的几点 (1)
- JSP数据和JavaScirpt数据交互使用问题的一种解决方法 (1)
- jsp中引用javascript中的变量和js中引用jsp的变量 (1)
- quote symbol expected错误 (1)
- div+css文字垂直居中 (1)
- 调用存储过程(转载) (1)
- Java调用SQL Server的存储过程详解 (1)
- execute、executeQuery和executeUpdate之间的区别 (1)
- 关于form表单与链接 (1)
- java程序的执行过程 (1)
- myeclipse设置快捷键 (1)
- 【摘】eclipse 中如何安装插件 (1)
- java.lang.IllegalArgumentException: Cannot format given Object as a Date (1)
- 常见数据库常用端口 (1)
- 用电脑建手机wifi(不用软件) (1)
- word如何自动生成目录 (1)
- sql server (mssqlserver)无法启动 (1)
- 如何删除自带的软件(包括联通定制机自带软件) (1)
- Oracle数据库、实例、用户、表空间、表之间的关系 (1)
- lt18i获得root权限 (1)
- 无法启动承载网络 连接到系统上的设备没有发挥作用 (1)
- XP with SP3 VOL 下载及密钥 (0)
- 开机时默认启动系统设置 (1)
- 对于目标文件系统,文件XXXXX过大 (1)
- 只有ie能上网,其他浏览器和软件都不能 (1)
- j2me搭建环境 (1)
- asp连接sql server数据库方式 (1)
- 清除cookie和flashcookie (1)
- 不能上网的一个原因 (1)
- 新增迅雷下载地址:Objective-c/iOS/iphone开发视频教程迅雷/高速下载 (1)
- ie不能上网 (1)
- 五款免费VPN介绍 (0)
- Java处理多人同时读写文件的文件锁处理 (1)
- 去除开机后出现拨号连接提示框 (1)
- 关于eclipse编码的问题 (1)
- eclipse tomcat的使用 (1)
- Eclipse中将web项目发布到Tomcat webapps (1)
- The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: (1)
- 警告: [SetPropertiesRule]{Server/Service/Engine/Host/Context} (1)
- Eclipse下Tomcat插件的安装 (1)
- 无法启动程序,因为计算机中丢失MSVCP71.DLL (1)
- oracle 10g的安装与卸载 (1)
- ORA-12154: TNS: 无法解析指定的连接标识符 (2)
- oracle客户端plsql的使用方法 (1)
- Eclipse自动生成UML图 (1)
- win7开通远程桌面访问 (1)
- 在远程连接时提示“您的凭据不工作”怎么办 (1)
- java.util.ConcurrentModificationException (1)
- java关于xml操作的一点理解 (1)
- Exception:Content is not allowed in prolog (1)
- java.net.SocketException: Connection reset (1)
- java FTPClient的使用 (1)
- 三种tomcat部署项目的方法 (1)
- excel冻结窗格 (1)
- java中获取系统属性以及环境变量 (1)
- 安裝 AnyConnect 時出現錯誤訊息「The VPN client agent was unable to create the interprocess communication depot.」 (1)
- linux 与windows实现端口转发 (1)
- TTL expired in transit (1)
- route add 行业应用 (1)
- java 数字证书操作(转) (1)
- Software caused connection abort: recv failed 一种解决办法 (1)
- inputStream对象的available()方法 (1)
- web.xml 中的listener、 filter、servlet 加载顺序及其详解 (1)
- java.lang.NumberFormatException: For input string: "" (1)
- ajax向后台传中文报错 (1)
- 刷新父窗口方法 (1)
- [转载]Eclipse-修改工程名 (1)
- 内存溢出之Tomcat内存配置(转) (1)
- forword 和redirect的区别(转) (1)
- 页面中禁用鼠标右键和回格键 (1)
- 中文乱码 (1)
- 父页面刷新问题 (1)
- spring 事务管理 (1)
- 关于异常类型 (1)
- 关于systeminfo的使用 (1)
- https及ca证书 (1)
- sql限制总结 (1)
- Cannot assign requested address出现的原因及解决方案 (转) (1)
- du与df的区别(转载) (1)
- jvm内存模型及可能出现的内存溢出 (1)
- 高并发下的oom killer (1)
- oracle如何看执行计划 (1)
- 关于批量作业中遇到的问题 (1)
- 浅谈应用日志 (1)
- 自认证证书的创建 (1)
- java集合应用 (0)
- java多线程 (0)
- 高并发思考 (0)
- 关于java IO (0)
- 加装ssd不重装系统,系统迁移 (1)
- linux下查看jdk版本 (1)
- linux内存 (1)
- pdm的使用 (0)
- mysql不走索引的原因 (0)
- java字符编码 (0)
- mysql视图效率优化 (1)
最新评论
-
hualom:
...
Displaytag详解
java产生随机数
中华IT学院 【大 中 小】 [ 2011年9月15日 ]
一、利用Math.Random()方法来生成随机数。
在Java语言中生成随 机数相对来说比较简单,因为有一个现成的方法可以使用。在Math类中,Java语言提供了一个叫做random的方法。通过这个方法可以让系统产生随机 数。不过默认情况下,其产生的随机数范围比较小,为大于等于0到小于1的double型随机数。虽然其随机数产生的范围比较小,不能够满足日常的需求。如 日常工作中可能需要产生整数的随机数。其实,只要对这个方法进行一些灵活的处理,就可以获取任意范围的随机数。
如我们可以先通过 random方法生成一个随机数,然后将结果乘以10。此时产生的随机数字即为大于等于0小于10的数字。然后再利用Int方法进行转换(它会去掉小数掉 后面的数字,即只获取整数部分,不是四舍五入)。最后即可获取一个0到9的整数型随机数字。其实现方法很简单,就是对原有的random方法按照如下的格 式进行变型:(int)(Math.Random()*10)即可。其实我们还可以对这个方法进行扩展,让其产生任意范围内的随机数。至需要将这个10换 成n即可,如改为(int)(Math.Random()*n)。此时应用程序就会产生一个大于等于0小与n之间的随机数。如将n设置为5,那么其就会产 生一个0到5之间的整数型的随机数。如果将这个写成一个带参数的方法,那么只要用户输入需要生成随机数的最大值,就可以让这个方法来生成制定范围的随机 数。在Java中定义自己的工具库
有时候程序员可能需要生成一个指定范围内的随机偶数或者奇数。此时是否可以通过这个方法来实现呢? 答案是肯定的。如现在程序要需要生成一个1-100范围内的偶数。此时该如何实现?首先,需要生成一个0到99之内的随机数(至于这里为什么是99,大家 耐心看下去就知道原因了)。要实现这个需求,很简单吧,只要通过如下语句就可以实现: i=1+(int)(Math.Random()*100)。其中(int)(Math.Random()*99)产生0到99的整数型随机数。然后再加 上1就是产生1到100之间的随机整数。然后将产生的随机数赋值给变量i。但是此时其产生的随机数即有偶数,又有奇数。而现在程序员需要的是一个随机的偶 数。那么我们可以在后面加上一个if判断语句。将这个随机数除以2,如果没有余数的话(或者余数为0)则表明这个随机数是偶数,直接返回即可。如果其返回 的余数不为零,那么就表明其是奇数,我们只要加上1就变为了偶数,返回即可。注意,在上面的随机数生成中,笔者采用的范围是0到99,然后再加上1让其变 为1到100的随机数。最后的结果就是生成1到100之间的随机偶数。其实,如果要范围随机奇数的话,至需要对上面的语句进行稍微的修改即可。Java: 改变你我的世界
假设现在用户想生成一个任意范围内的奇数或者偶数,能够实现吗?假设现在用户想实现一个m到n之间的任意偶数(其中m
可见虽然random方法其自身产生的随机数有比较严格的范围限制。但是只要对其进行合理的转换,程序员仍然可以采用这个方法产生用户所需要的随机数据。
二、通过Random类来生成随机数。
在Java语言中,除了可以通过random 方法来产生随机数之外,还可以通过一个random类来产生随机数。程序开发人员可以通过实例化一个Random对象来创建一个随机数的生成器。如 Random i=new Random()。通过这条语句就利用了Random类创建了一个随机数的生成器。不过以这种方法创建随机数时,与采用Random方法产生随机数的机制 不同。利用现在这种方式实例化对象时,Java编译器会以系统当前的时间作为随机数生成器的种子。由于时间时时刻刻在变化的。若以这个时间作为生成器的种 子,就可以保证生成的随机数真的是随机的,其生成的随机数重复率会大大的降低。
利用这种方法其比较方便。如可以利用提供的关键字,让 程序返回一个随机的整数(采用int nextInt(10))等等。不过其返回控制要比Random方法困难一点。如现在需要系统提供一个10到50之间的随机奇数, 利用这个Random类就无法完成。也就是说,利用这个Random类来生成随机数,其只能够控制上限,而不能够控制下限。换一句话说,其可以指定最大的 随机数范围,而不能够指定最小的随机数范围。所以,在灵活性上,其比Random方法要稍微差一点。
另外利用这个方法来实现的话,必 须先创建一个对象。也就是说利用Randow类来创建对象。这跟Randow方法不同。像上面举的例子中,Randow方法本身就是一个math类中方 法,可以直接调用,省去对象创建的方法。为此笔者建议各位读者与程序开发人员,最好还是使用Random方法来创建随机数。只有在生成一些比较特殊的随机 数时采用Random类。如现在需要生成一个概率密度为高斯分布的双精度值随机数时,则通过采用Random类的方法来创建随机数相对来说比较简单一点。
三附、产生随机的字符。
上面介绍的两种方法,产生的都是随机的数值型数据。但是有时候用户可能还需要产生随机的字符。其实也可以利用random方法来产生随机字符。如可以利 用代码生成一个随机的小写字符:(char)(‘a’+Math.random()*(‘z’-‘a’+1))。其实这跟生成任意两个数之间的随机数类 似。通过以上的代码就可以生成一个范围之内的任意随机字符。通过对这个代码进行适当的修整,还可以生成任意两个字符之间的随机字符与任意大写字符的随机字 符。其转换的方式跟上面提到的任意范围之内的随机数类似。各位读者若感兴趣的话,可以自己进行测试一下。师傅领进门,修行在自身。如果笔者在这里一股脑儿 将所有的答案告诉大家,大家的印象不会很深。大家若回去自己动手试试看,反而更容易记住。
笔者在这里给大家一个提示,只需要根据m+(int)(Math.Random()*(n-m))这条语句来调整(char)(‘a’+Math.random()*(‘z’-‘a’+1))这个代码即可。
最后笔者需要强调的一点就是在用户传入参数的时候,最好要对用户传入的参数进行合法性检查。以免用户传入的参数不符合既定的要求,如参数需要的是数值型的数据而传入的却是字符型的数据,而导致程序运行出错。
/////////////////////////////////////////////////////////////////////////
一.在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,我们可以拿他作为一个随机数,我们可以拿他对一些数取模,就可以把他限制在一个范围之内啦
其实在Random的默认构造方法里也是使用上面第三种方法进行随机数的产生的
对于方法二中的Random类有以下说明:
java.util.Random类有两种方式构建方式:带种子和不带种子
不带种子:
此种方式将会返回随机的数字,每次运行结果不一样
public class RandomTest {
public static void main(String[] args) {
java.util.Random r=new java.util.Random();
for(int i=0;i<10;i++){
System.out.println(r.nextInt());
}
}
带种子:
此种方式,无论程序运行多少次,返回结果都是一样的
public static void main(String[] args) {
java.util.Random r=new java.util.Random(10);
for(int i=0;i<10;i++){
System.out.println(r.nextInt());
}
}
两种方式的差别在于
(1) 首先请打开Java Doc,我们会看到Random类的说明:
此类的实例用于生成伪随机数流,此类使用 48 位的种子,该种子可以使用线性同余公式对其进行修改(请参阅 Donald Knuth 的《The Art of Computer Programming, Volume 2》,第 3.2.1 节)。
如果用相同的种子创建两个 Random 实例,则对每个实例进行相同的方法调用序列,它们将生成并返回相同的数字序列。为了保证实现这种特性,我们为类Random指定了特定的算法。为了 Java 代码的完全可移植性,Java 实现必须让类 Random 使用此处所示的所有算法。但是允许 Random 类的子类使用其他算法,只要其符合所有方法的常规协定即可。
Java Doc对Random类已经解释得非常明白,我们的测试也验证了这一点。
(2) 如果没有提供种子数,Random实例的种子数将是当前时间的毫秒数,可以通过System.currentTimeMillis()来获得当前时间的毫秒数。打开JDK的源代码,我们可以非常明确地看到这一点。
/**
* Creates a new random number generator. Its seed is initialized to
* a value based on the current time:
* Random() { this(System.currentTimeMillis()); }java.lang.System#currentTimeMillis()
*/
public Random() { this(System.currentTimeMillis()); }
另外:
random对象的nextInt(),nextInt(int n)方法的说明:
int nextInt()
返回下一个伪随机数,它是此随机数生成器的序列中均匀分布的 int 值。
int nextInt(int n)
返回一个伪随机数,它是从此随机数生成器的序列中取出的、在 0(包括)和指定值(不包括)之间均匀分布的 int值。
那么产生一个16位的随机数呢?
每次产生一个0到9之间的整数(Math.random()),转换成字符类型,然后将这十六个字符拼接在一起,再转换成long类型就行了。
再有,java中整数大于9位就会报错。
中华IT学院 【大 中 小】 [ 2011年9月15日 ]
一、利用Math.Random()方法来生成随机数。
在Java语言中生成随 机数相对来说比较简单,因为有一个现成的方法可以使用。在Math类中,Java语言提供了一个叫做random的方法。通过这个方法可以让系统产生随机 数。不过默认情况下,其产生的随机数范围比较小,为大于等于0到小于1的double型随机数。虽然其随机数产生的范围比较小,不能够满足日常的需求。如 日常工作中可能需要产生整数的随机数。其实,只要对这个方法进行一些灵活的处理,就可以获取任意范围的随机数。
如我们可以先通过 random方法生成一个随机数,然后将结果乘以10。此时产生的随机数字即为大于等于0小于10的数字。然后再利用Int方法进行转换(它会去掉小数掉 后面的数字,即只获取整数部分,不是四舍五入)。最后即可获取一个0到9的整数型随机数字。其实现方法很简单,就是对原有的random方法按照如下的格 式进行变型:(int)(Math.Random()*10)即可。其实我们还可以对这个方法进行扩展,让其产生任意范围内的随机数。至需要将这个10换 成n即可,如改为(int)(Math.Random()*n)。此时应用程序就会产生一个大于等于0小与n之间的随机数。如将n设置为5,那么其就会产 生一个0到5之间的整数型的随机数。如果将这个写成一个带参数的方法,那么只要用户输入需要生成随机数的最大值,就可以让这个方法来生成制定范围的随机 数。在Java中定义自己的工具库
有时候程序员可能需要生成一个指定范围内的随机偶数或者奇数。此时是否可以通过这个方法来实现呢? 答案是肯定的。如现在程序要需要生成一个1-100范围内的偶数。此时该如何实现?首先,需要生成一个0到99之内的随机数(至于这里为什么是99,大家 耐心看下去就知道原因了)。要实现这个需求,很简单吧,只要通过如下语句就可以实现: i=1+(int)(Math.Random()*100)。其中(int)(Math.Random()*99)产生0到99的整数型随机数。然后再加 上1就是产生1到100之间的随机整数。然后将产生的随机数赋值给变量i。但是此时其产生的随机数即有偶数,又有奇数。而现在程序员需要的是一个随机的偶 数。那么我们可以在后面加上一个if判断语句。将这个随机数除以2,如果没有余数的话(或者余数为0)则表明这个随机数是偶数,直接返回即可。如果其返回 的余数不为零,那么就表明其是奇数,我们只要加上1就变为了偶数,返回即可。注意,在上面的随机数生成中,笔者采用的范围是0到99,然后再加上1让其变 为1到100的随机数。最后的结果就是生成1到100之间的随机偶数。其实,如果要范围随机奇数的话,至需要对上面的语句进行稍微的修改即可。Java: 改变你我的世界
假设现在用户想生成一个任意范围内的奇数或者偶数,能够实现吗?假设现在用户想实现一个m到n之间的任意偶数(其中m
可见虽然random方法其自身产生的随机数有比较严格的范围限制。但是只要对其进行合理的转换,程序员仍然可以采用这个方法产生用户所需要的随机数据。
二、通过Random类来生成随机数。
在Java语言中,除了可以通过random 方法来产生随机数之外,还可以通过一个random类来产生随机数。程序开发人员可以通过实例化一个Random对象来创建一个随机数的生成器。如 Random i=new Random()。通过这条语句就利用了Random类创建了一个随机数的生成器。不过以这种方法创建随机数时,与采用Random方法产生随机数的机制 不同。利用现在这种方式实例化对象时,Java编译器会以系统当前的时间作为随机数生成器的种子。由于时间时时刻刻在变化的。若以这个时间作为生成器的种 子,就可以保证生成的随机数真的是随机的,其生成的随机数重复率会大大的降低。
利用这种方法其比较方便。如可以利用提供的关键字,让 程序返回一个随机的整数(采用int nextInt(10))等等。不过其返回控制要比Random方法困难一点。如现在需要系统提供一个10到50之间的随机奇数, 利用这个Random类就无法完成。也就是说,利用这个Random类来生成随机数,其只能够控制上限,而不能够控制下限。换一句话说,其可以指定最大的 随机数范围,而不能够指定最小的随机数范围。所以,在灵活性上,其比Random方法要稍微差一点。
另外利用这个方法来实现的话,必 须先创建一个对象。也就是说利用Randow类来创建对象。这跟Randow方法不同。像上面举的例子中,Randow方法本身就是一个math类中方 法,可以直接调用,省去对象创建的方法。为此笔者建议各位读者与程序开发人员,最好还是使用Random方法来创建随机数。只有在生成一些比较特殊的随机 数时采用Random类。如现在需要生成一个概率密度为高斯分布的双精度值随机数时,则通过采用Random类的方法来创建随机数相对来说比较简单一点。
三附、产生随机的字符。
上面介绍的两种方法,产生的都是随机的数值型数据。但是有时候用户可能还需要产生随机的字符。其实也可以利用random方法来产生随机字符。如可以利 用代码生成一个随机的小写字符:(char)(‘a’+Math.random()*(‘z’-‘a’+1))。其实这跟生成任意两个数之间的随机数类 似。通过以上的代码就可以生成一个范围之内的任意随机字符。通过对这个代码进行适当的修整,还可以生成任意两个字符之间的随机字符与任意大写字符的随机字 符。其转换的方式跟上面提到的任意范围之内的随机数类似。各位读者若感兴趣的话,可以自己进行测试一下。师傅领进门,修行在自身。如果笔者在这里一股脑儿 将所有的答案告诉大家,大家的印象不会很深。大家若回去自己动手试试看,反而更容易记住。
笔者在这里给大家一个提示,只需要根据m+(int)(Math.Random()*(n-m))这条语句来调整(char)(‘a’+Math.random()*(‘z’-‘a’+1))这个代码即可。
最后笔者需要强调的一点就是在用户传入参数的时候,最好要对用户传入的参数进行合法性检查。以免用户传入的参数不符合既定的要求,如参数需要的是数值型的数据而传入的却是字符型的数据,而导致程序运行出错。
/////////////////////////////////////////////////////////////////////////
一.在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,我们可以拿他作为一个随机数,我们可以拿他对一些数取模,就可以把他限制在一个范围之内啦
其实在Random的默认构造方法里也是使用上面第三种方法进行随机数的产生的
对于方法二中的Random类有以下说明:
java.util.Random类有两种方式构建方式:带种子和不带种子
不带种子:
此种方式将会返回随机的数字,每次运行结果不一样
public class RandomTest {
public static void main(String[] args) {
java.util.Random r=new java.util.Random();
for(int i=0;i<10;i++){
System.out.println(r.nextInt());
}
}
带种子:
此种方式,无论程序运行多少次,返回结果都是一样的
public static void main(String[] args) {
java.util.Random r=new java.util.Random(10);
for(int i=0;i<10;i++){
System.out.println(r.nextInt());
}
}
两种方式的差别在于
(1) 首先请打开Java Doc,我们会看到Random类的说明:
此类的实例用于生成伪随机数流,此类使用 48 位的种子,该种子可以使用线性同余公式对其进行修改(请参阅 Donald Knuth 的《The Art of Computer Programming, Volume 2》,第 3.2.1 节)。
如果用相同的种子创建两个 Random 实例,则对每个实例进行相同的方法调用序列,它们将生成并返回相同的数字序列。为了保证实现这种特性,我们为类Random指定了特定的算法。为了 Java 代码的完全可移植性,Java 实现必须让类 Random 使用此处所示的所有算法。但是允许 Random 类的子类使用其他算法,只要其符合所有方法的常规协定即可。
Java Doc对Random类已经解释得非常明白,我们的测试也验证了这一点。
(2) 如果没有提供种子数,Random实例的种子数将是当前时间的毫秒数,可以通过System.currentTimeMillis()来获得当前时间的毫秒数。打开JDK的源代码,我们可以非常明确地看到这一点。
/**
* Creates a new random number generator. Its seed is initialized to
* a value based on the current time:
* Random() { this(System.currentTimeMillis()); }java.lang.System#currentTimeMillis()
*/
public Random() { this(System.currentTimeMillis()); }
另外:
random对象的nextInt(),nextInt(int n)方法的说明:
int nextInt()
返回下一个伪随机数,它是此随机数生成器的序列中均匀分布的 int 值。
int nextInt(int n)
返回一个伪随机数,它是从此随机数生成器的序列中取出的、在 0(包括)和指定值(不包括)之间均匀分布的 int值。
那么产生一个16位的随机数呢?
每次产生一个0到9之间的整数(Math.random()),转换成字符类型,然后将这十六个字符拼接在一起,再转换成long类型就行了。
再有,java中整数大于9位就会报错。
相关推荐
介绍java 产生随机数式介绍java 产生随机数式介绍java 产生随机数式介绍java 产生随机数式
java产生随机数的几种方式 java产生随机数的几种方式 java产生随机数的几种方式 java产生随机数的几种方式
Java产生随机数代码 Java产生随机数代码
利用JAVA语言产生某一特定范围的随机数,并且能够将随机数保存在具体的文件中。
Java产生随机数的两种方式.doc
java产生随机数的两个方法.doc
在java中,我们可以通过两种方式来获取随机数(generating a random number)一种是大家熟悉的java.lang.Math.Random()静态方法,另一种是创建java.util.Random对象。本文介绍了两种方法的使用过程。
在Java中产生随机数的两个方法,在Java中产生随机数的两个方法
java中产生随机数的两个方法,希望这个资源对大家有帮助。
主要是一个Java获取计算机基本信息并且在Web页面上以ExtJs4的图表展示,这里删除了ExtJs4的资源和一个算法产生验证码,因为这个算法最终使用到了产品中,所以就把这个测试的类删除了,各位不好意思了
java 随机数,使用java产生随机数的玩意。
//产生随机数的类 final SuiJiShuClass sjs=new SuiJiShuClass(); final JPanel panel=new JPanel(); //初始化一个JPanel panel.setBorder(BorderFactory.createTitledBorder("QQ:330936274")); //设置边界 ...
一个产生随机数的操作类,可自由定制随机数的类型个数等 用于产生校验码等
java代码产生不重复的随机数,有用处,可以参考!
JAVA中的随机数产生和排序,老师给的一个题目,在调试中得到的,看了还是有些启发的!希望可以知道更多解决的方法,请大家指教!
JAVA小程序 有10个进程同步产生随机数 并分别写入两个文件 并排序输出
主要介绍了Java中随机数的产生方式与原理详解的相关资料,需要的朋友可以参考下
直接运行main即可,参数为数字范围 比如10 运行后会输出9,3,0,7,2,8,4,1,5,6,
java 文件读写 java 文件读写java 文件读写 java 文件读写java 文件读写 java 文件读写java 文件读写 java 文件读写