`
isiqi
  • 浏览: 16486611 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

J2ME中Random类的使用

阅读更多

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

    在标准Java库中,`java.util.Random`类是生成随机数的主要工具,但在J2ME环境中,由于资源限制,这个类的功能可能比较有限。在描述中提到的`nextInt(int arg0)`方法,通常用于生成一个指定范围内的随机整数。然而,...

    j2me中星星图片的各种处理

    在J2ME中,可以使用`Graphics`类提供的方法对图片进行旋转。例如,`rotate(int x, int y, int angle)`方法可以在指定的(x, y)坐标上旋转当前的绘图区域,angle参数表示旋转的角度。对于描述中的“箭头图标旋转”,...

    tengge手机端j2me编程教程完整版

    随机数Random类的使用 ┃7_2.数学Math类的使用 ┃7_3.日期Date类的使用 ┃7_4.系统System类用法 ┃7_5.平台Runtime类的使用 ┃7_6.堆栈类Stack的使用 ┃7_7.枚举类Enumeration的使用 ┃7_8.定时器Timer类的使用 ┃7_...

    J2ME中文帮助文档

    ### J2ME中文帮助文档知识点概述 #### 一、基础概念与组件介绍 **J2ME**(Java 2 Micro Edition)是Sun Microsystems为...开发者可以根据实际需求选择合适的类和方法进行组合使用,从而构建出功能强大的移动应用。

    j2me随机数问题

    因此,确保使用的`Random`类在当前配置和剖面中可用是非常重要的。 #### 四、解决方案 1. **检查导入语句**:确保在程序开头有如下导入语句: ```java import java.util.Random; ``` 2. **确认类库支持**:...

    数字小游戏 J2me

    - 使用`Random`类生成随机数字和颜色。 - 定义了`f`变量,用于存储字体样式,确保游戏中的文字具有统一的风格。 - `gamePaint`方法负责生成随机数字,并在屏幕上随机位置绘制。 - `scoreCount`方法更新并显示当前...

    J2ME知识点汇集,J2ME考试专用

    7. **随机数生成**:在J2ME中,使用`Math.random()`生成0到1之间的随机数,乘以范围大小(不包括最大值)并加1,然后转换为整数,可以得到指定范围内的随机整数。 8. **CLDC与J2SE的区别**:CLDC不支持线程组、守护...

    j2me-中文api(自己整合的简版pdf)

    本文档主要介绍了J2ME中常用类的基本用法,并提供了一个简版的中文PDF文档供学习参考。以下将详细解释文档中提到的部分关键类。 #### 三、关键类详解 ##### 1. Class Canvas - **功能**:`Canvas`是J2ME中的基本...

    J2ME手机扫雷游戏

    4. **随机数生成**:为了随机布置雷,开发者会利用Java的Random类来确定雷的位置,确保每次游戏开始都有不同的布局。 5. **状态管理**:游戏需要跟踪当前状态,如游戏进行中、胜利或失败。当玩家揭示最后一个无雷...

    J2ME考试试题集

    - **键盘事件**:在J2ME中,可以使用`keyPressed`、`keyReleased`和`keyRepeated`等方法来处理键盘事件。其中,`keyReleased`方法用于处理按键释放事件,当用户松开某个键时触发。 ### 5. 设备类型 - **CLDC适用...

    J2ME试题库

    上述问题涉及了J2ME编程中的多个核心知识点,包括MIDlet类的使用、屏幕尺寸获取、抽象类和内部类的概念、事件处理、列表组件的选择类型、重绘屏幕、MIDlet套件的组成、颜色设置、记录仓库的管理、选择类型的限制、...

    J2ME 贪吃蛇 带详细注解

    本文将介绍如何使用Java Micro Edition (J2ME) 编写一个简单的贪吃蛇游戏。首先,我们来看一下主要涉及的类和组件: 1. `TcsMIDlet` 类:这是主MIDlet(Mobile Information Device Profile)类,负责管理应用程序的...

    j2me 猜数字小程序

    1. **随机数生成**:使用`java.util.Random`类生成一个随机整数。例如,我们可以创建一个Random对象,然后调用nextInt(int bound)方法生成一个指定范围内的随机数。 2. **用户交互**:J2ME的MIDP提供了用户界面组件...

    tengge手机端j2me编程教程.doc

    第八章介绍了如何在J2ME中使用存储集来管理和操作数据: 1. **存储集的创建和使用**:类似于数据库表的概念。 2. **存储枚举器**:遍历存储集中的记录。 3. **记录过滤**:按条件筛选数据。 4. **记录排序**:对...

    j2me猜数字小游戏

    1. **随机数生成**:使用`java.util.Random`类生成1到9999之间的随机四位数。为了确保生成的数字无重复,可以将所有可能的四位数存储在一个数组中,然后用随机索引选取。 2. **用户输入处理**:J2ME提供了一系列API...

    j2me编写小游戏记忆盒

    1. **用户界面(UI)设计**:J2ME中的用户界面主要通过MIDP(Mobile Information Device Profile)提供的轻量级用户界面组件(LWUIT)或者CLDC(Connected Limited Device Configuration)的Canvas类来构建。...

    J2ME贪吃蛇源代码

    `SnakeCanvas`类中的`init()`方法初始化游戏状态,包括设置蛇的初始位置、方向和食物位置。`paint(Graphics g)`方法负责绘制游戏界面,包括蛇的身体和食物。`move(int direction)`方法处理蛇的移动逻辑,更新蛇的...

Global site tag (gtag.js) - Google Analytics