J2ME中Random类的使用

原创 2005年03月01日 20:25:00

   在J2ME中,由于大部分的游戏都会涉及到随机性的事件,Random类自然就成为J2ME程序员经常使用的一个类了。但是对于新手来说,Random类看似简单,也有可能会出现这样那样的错误。所以在这里把我对于这个类的使用心得总结一下。

   random类在CLDC1.0中就已经定义了。这个类有两个构造函数Random() 和Random(long seed) 并且提供了四个常用方法:

   next(int bits)
   nextInt()
   nextLong()
   setSeed(long seed)

   其中next(int bits)用来产生指定范围的随机数,即:
 next(1)产生2的1次方之内的随机数
 next(2)产生2的2次方之内的随机数
 next(3)产生2的3次方之内的随机数
 ...............................
 next(n)产生2的n次方之内的随机数
 ...............................
 next(32)产生2的32次方之内的随机数,就相当于nextInt()了
   nextInt()用来产生随机整数,最大2的32次方
   nextLong()用来产生随机长整数,最大2的64次方
   setSeed(long seed) 用于设定随机数的种子,即这里的seed。随机数种子的用处是:一般说来,这里的Random类产生随机数是伪随机数,是系统采用特定的算法生成出来的,关于这一点我们可以采用一个试验来证明。方法是new两个Random类random1和random2。各自调用nextInt方法10次,我们可以看出,虽然各自产生的是随机数,但是两个Random类产生的随机数都是一样的。这就使得随机数存在着漏洞。如果这样的随机数用在安全应用上面,就达不到预想的效果了。所以Random类提供了这个方法,以进一步提高随机性。

   在这里需要特别为新手朋友们指出的是,我们在使用随机数的时候,不能每次都new 一个 Random类出来,又不设定随机数种子,因为那样作的结果是,每次产生的随机数都是一样的。
   将一个“错误”的例子写在这里:
   import java.util.Random;

   import javax.microedition.midlet.*;

   public class J2ME extends MIDlet {
    private Random random;

    public J2ME() {
    }

    protected void startApp() throws MIDletStateChangeException {
        for (int i = 0; i < 20; i++) {
            random=new Random();
            System.out.println(random.nextInt());
        }

    }

    protected void pauseApp() {
    }

    protected void destroyApp(boolean arg0) throws MIDletStateChangeException {
    }
    这个例子产生的随机数很多都是相同的。正确的做法应该是在 protected void startApp() throws MIDletStateChangeException 函数中做出如下修改
        random=new Random();
        for (int i = 0; i < 20; i++) {           
            System.out.println(random.nextInt());
        }
    关于Random类的总结就到这里了,相信大家都可以正确使用这个类了。呵呵,请多关照。
    MSN:cuilichen@hotmail.com

J2ME中Random类

J2ME和J2SE不同,不能使用Math类的random来生成随机数字,只能使用java.util包的Random类来生成随机数字。J2ME中,由于大部分的游戏都会涉及到随机性的事件,Random类自...
  • guoquanyou
  • guoquanyou
  • 2008年11月19日 16:11
  • 903

android Random的使用

程序员的店:http://mickeyhouse999.taobao.com/index.htm?spm=2013.1.w5002-3513783747.2.w5Yghm 插个广告,小店刚开张,欢迎...
  • bx276626237
  • bx276626237
  • 2013年09月16日 15:54
  • 2031

java常用类--随机数类Random

Random类用于生成一个伪随机数,它的构造器可以是无参数(以系统时间为种子)的也可以显式的传入一个种子; 它可以输出各种类型的随机数;如果两个random的初始种子是一样的,那么他们产生的相同类型...
  • acm_lkl
  • acm_lkl
  • 2015年01月25日 22:09
  • 1837

java中Math类与Random类的用法

一.Math类 表示数学操作,比如求平方根、四舍五入等,它是java.lang包中的类 public final class Math extends Object Math类中的方法都是静态方法,...
  • tomcmd
  • tomcmd
  • 2015年10月11日 12:58
  • 1902

Random类使用心得

构造函数:Random() :创建一个新的随机数发生器。Random(long seed) :用一个种子(长整型)创建一个随机数发生器。关于种子的描述: 这个类的对象使用一个48位的种子, 如果这...
  • zr527397749
  • zr527397749
  • 2016年07月04日 13:39
  • 531

Unity 3D - Random类

Unity 3D - Random类 : Random类可以用来生成随机数。 Random成员变量 : 成员变量 说明 seed 随机数生成器种子 val...
  • yu__jiaoshou
  • yu__jiaoshou
  • 2017年05月04日 17:02
  • 436

java基础---JAVA中Random类

来源:JAVA的Random类    Java中的Random()函数  Random类 (java.util)          Random类中实现的随机算法是伪随机,也就是有规则的随机。在进...
  • hla199106
  • hla199106
  • 2015年04月13日 18:20
  • 1477

java中Random类和Math类中的random方法的联系和区别

联系:Math类中的random方法实质上是调用了Random类中的nextDouble方法,所以随机产生0到1(左闭右开)的double类型的数 区别:Random类产生的随机数其实是伪随机的,它的...
  • fengGeek
  • fengGeek
  • 2016年03月12日 23:22
  • 131

Math类与Random类使用(Java)

在学习Math类与Random类之前,先介绍一个很有用的System类的方法 格式:arraycopy(Object src,int srePos,Object dest,int desePos,in...
  • hdd871532887
  • hdd871532887
  • 2015年12月15日 22:54
  • 519

用Eclipse做J2Me开发的前期配置

 我也是一个初学者,从一个初学者的角度上讲,就是要尽可能的详细,因为这个东西稍微配置不对,或者是那里没有注意到,就会走不少的弯路,所以我在这里把配置讲得非常的详细,以图文的形式展示,以免你看了不知道所...
  • fenglibing
  • fenglibing
  • 2007年09月05日 23:01
  • 10302
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:J2ME中Random类的使用
举报原因:
原因补充:

(最多只允许输入30个字)