J2ME如何产生随机数

java.util 套件之中有个Random 类别,负责用来产生随机数(只能是int 或long 型别的随机数)。所以使用前,我们必须先产生Random 类别,您可以用Random rdm = new Random(seedvalue) ;其中seedvalue 是随机数种子。或者您也可以用Random rdm = new Random() ;这个建构式会在内部叫用this(System.currentTimeMillis());代表会根据当时的时间设定随机数种子。任何时候我们也可以叫用setSeed()来设定随机数种子,我们可以利用其nextInt()来产生int 型态的随机数、nextLong()来产生long 型态的随机数。

底下范例分别产生10 个int 型态的随机数与10 个long 型态的随机数

//RandomTest.java
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import java.util.*;
 
public class RandomTest extends MIDlet {
    public RandomTest() {
    }
 
    public void startApp() {
        Random rdm = new Random();
        for (int i = 0; i < 10; i++) {
            System.out.println(rdm.nextInt());
        }
        for (int i = 0; i < 10; i++) {
            System.out.println(rdm.nextLong());
        }
    }
 
    public void pauseApp() {
    }
 
    public void destroyApp(boolean unconditional) {
    }
}

执行结果(由于是随机数,每次产生的结果都不同):
773442310
-2109825643
-1768455644
2127084617
1315993862
643863720
1099764912
-349914351
1391929217
-1930539511
-65473852161141594
635052072394497921
-7151192063228537872
-424311676279222327
-6869450578076376049
6-6/47
-2480957207160828119
4260444547110204318
1034439773959919202
5039839362698545211
3284977682610163662

由上述范例可以得知,nextInt()产生的数值介于int 型态的范围(2-31~231)之中。nextLong()产生的数值介于long 型态的范围(2-63~263)之中。其实这两个方法在内部都是叫用其next()方法,此方法需要一个参数,如果给定11,就会产生一个11 个bit 的随机数。因此,extInt()的实作为:

public int nextInt()
{
    return next(32);
}

nextLong()的实作为:

public long nextLong()
{
    return ((long)next(32) << 32) + next(32);
}

如果我们想要自定随机数产生的范围,那么就要动要到一些技巧。举例来说,如果你想要产生-160~160 之间的数值,那么我们就必须动用到余数运算符(%),

int res = rdm.nextInt()%160 ;

如果想要产生0~160 之间的数值,由于int 本身是有号数,而且为32 bits。必须把第一个bit 设定成0(代表正数)才行,我们可以使用:

int res = (rdm.nextInt() >>> 1)%160 ;

利用无号移位运算符。或

int res = (rdm.nextInt() & 0x7FFFFFFF)%160 ;

把第一个bit 设成0。两种方法皆可。

如果想要产生-160~0 之间的数值,只要把第一个bit 设成1 即可。我们可以把上述产生正数的方法前面加上负号。或者也可以用:

int res = (rdm.nextInt() | 0x80000000)%160 ;

范例程序如下:

 

//RandomWithRangeTest.java
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import java.util.*;
 
public class RandomWithRangeTest extends MIDlet {
    public RandomWithRangeTest() {
    }
 
    public void startApp() {
        Random rdm = new Random();
        //产生-160~+160 之间的随机数
        System.out.println("Range from -160 to + 160");
        for (int i = 0; i < 5; i++) {
            System.out.println(rdm.nextInt() % 160);
        }
        //产生0~+160 之间的随机数
        System.out.println("Range from 0 to +160");
        for (int i = 0; i < 5; i++) {
            System.out.println((rdm.nextInt() >>> 1) % 160);
        }
        //产生0~+160 之间的随机数
        System.out.println("Range from 0 to +160");
        for (int i = 0; i < 5; i++) {
            System.out.println((rdm.nextInt() & 0x7FFFFFFF) % 160);
        }
        //产生-160~0 之间的随机数
        System.out.println("Range from -160 to 0");
        for (int i = 0; i < 5; i++) {
            System.out.println( -(rdm.nextInt() >>> 1) % 160);
        }
        //产生-160~0 之间的随机数
        System.out.println("Range from -160 to 0");
        for (int i = 0; i < 5; i++) {
            System.out.println( -(rdm.nextInt() & 0x7FFFFFFF) % 160);
        }
        //产生-160~0 之间的随机数
        System.out.println("Range from -160 to 0");
        for (int i = 0; i < 5; i++) {
            System.out.println((rdm.nextInt() | 0x80000000) % 160);
        }
    }
 
    public void pauseApp() {
    }
 
    public void destroyApp(boolean unconditional) {
    }
}

 

执行结果:
Range from -160 to + 160
123
-63
-19
103
-145
Range from 0 to +160
158
64
73
30
72
Range from 0 to +160
62
122
141
75
83
Range from -160 to 0
-74
-115
-37
-144
-98
Range from -160 to 0
-2
-5
-153
-15
-32
Range from -160 to 0
-27
-151
-57
-72
-7

基于bert实现关系三元组抽取python源码+数据集+项目说明.zip基于bert实现关系三元组抽取python源码+数据集+项目说明.zip基于bert实现关系三元组抽取python源码+数据集+项目说明.zip基于bert实现关系三元组抽取python源码+数据集+项目说明.zip基于bert实现关系三元组抽取python源码+数据集+项目说明.zip 个人大四的毕业设计、课程设计、作业、经导师指导并认可通过的高分设计项目,评审平均分达96.5分。主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的学习者,也可作为课程设计、期末大作业。 [资源说明] 不懂运行,下载完可以私聊问,可远程教学 该资源内项目源码是个人的毕设或者课设、作业,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96.5分,放心下载使用! 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),供学习参考。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值