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类(线性同余法)

  • 2008年10月08日 09:35
  • 12KB
  • 下载

J2ME中Connector类的使用方法总结

包 javax.microedition.io.Connector 继承java.lang.Object 语法:public class Connector extends Object...
  • kbest
  • kbest
  • 2011年08月09日 13:58
  • 862

j2me 使用Timer和TimerTask来实现多线程

在Java中可以使用两种方式来实现多线程操作,这两种方式依次是: Timer类—定时器类派生自Object。它是个定时器类,作为后台线程,执行未来的任务。任务可安排一次性执行,或定期重复执行。于每个 ...

J2ME可选包MMAPI一些使用

播放单音 try {     Manager.playTone(ToneControl.C4, 5000 /* millisec */, 100 /* max vol */); } catch ...
  • kbest
  • kbest
  • 2011年08月09日 14:13
  • 616

J2ME图片半透明处理(使用图片像素)(仅部分手机支持)

其实就是把一张图的argb值都取出来存在一个整型数组里(用Image对象的getRGB方法),然后用循环逐一修改argb值得最高位(最高位 的8个2进制值代表了阿尔法通道也不什么的,反正就是透明度),...

在J2ME中使用Socket通过cmwap接入点访问安全HTTPS

这个问题是在我升级J2ME版XHTML浏览器的时候被引入的,我尝试了很多方法、发了很多帖子、问了很多人都没有找到可行的解决方案。最后我在PC上通用OTA连接方式使用WireShark拦截数据包才解决了...
  • jinhill
  • jinhill
  • 2011年02月07日 21:20
  • 1382

使用NetBeans进行J2ME开发(三):低级图形用户界面Canvas

在这一篇中,我将向大家介绍图形用户界面中的低级图形用户界面。所谓低级图形用户界面,指的是那种我们可以自己在上面画图的控件,它是和TextBox,List等等这些用户控件刚好相对的概念,因为这些用户控件...

J2ME网络编程使用http和socket的两种方法

本文描述了在J2me中开发主要使用的网络连接方法,分别详细介绍了使用http和socket两种方法。   HttpConnection 首先我们先来看一个简单的例子吧: 主要用到的java包: ...

使用Eclipse,Kemulator模拟器配置J2ME工程

1、安装JAVA环境。jdk1.4以上即可。 2、使用Eclipse3.4以及以上的版本,下载eclipseme.feature_1.7.9_site.zip。你可以通过Eclipse-》Help-...

j2me学习笔记【15】——使用低层用户界面显示文本小实例

    字体类型有默认系统字体、等宽字体和均衡字体3种字体类型,系统默认字体是设备所选择的字体,在等宽字体中,所有字符的宽度都相同。在均衡字体中,字符的宽度由字符的自然情况决定。    有4种字形可以...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:J2ME中Random类的使用
举报原因:
原因补充:

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