`
txf2004
  • 浏览: 6875519 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

47、产生随机数的时候,避免使用nextInt()方法,尽量使用nextInt(int n)方法

 
阅读更多

如果想要产生位于0和某个上界之间的随机整数,用next()方法的话,代码如下:



因为,对于nextInt()方法来说,产生的数是随机的,但是有如下三个缺点:

a:如果n是一个比较小的 n的乘方,比较短的周期后,它产生的随机书序列将会重复。

b:如果n不是2的平方,平均起来,它产生的数字并不是均匀分布的,有的数字出现的频率比较高。

c:第三个缺点是,这个程序有时候可能会产生灾难性后果。如下面的程序:


产生的结果是-6.

再看下面:


abs函数,对于返回的还是它本身。

所以,这里容易出问题。

那么用nextInt(int n)方法就可以避免上面那些缺点。

分享到:
评论

相关推荐

    Java 随机数比较和分析

    概况:  本文概述2种jdk的随机数实现方式,旨在了解其运行...  1、Math.random() ——返回[0,1)的随机小数,通过(int) (n * Math.random())即可获取[0,n)的随机数  2、java.util.Random的nextInt(n)方法 —

    Java Random类的详细介绍(Java生成随机数)

    Java Random类的详细介绍(Java生成随机数)一、Random类的使用1.Random类生成随机数(int)的基本语法:2.几种常用的随机数生成二、Random类的详细介绍1.生成指定范围的数字2.Random.nextInt()与Math.random()的区别 ...

    RandomNumberGenerator:适用于 Android 的随机数生成器

    使用 Java 的 Random 类( )和 nextInt(int) 方法来生成数字,如果您对什么感兴趣该应用程序用于生成这些数字。 每次按下按钮时都会生成一个新的 Random 类,因此不会使用两次相同的种子。 由开发 泰勒·霍兰德 - ...

    j2me random类(线性同余法)

    前几天,在做J2ME软件时,用到了RANDOM类的nextInt(int arg0)方法,感觉不怎么好,所以自己利用线性同余法重新写了一个,希望有用!

    java 彩色验证码实例

    int r3 = random.nextInt(6) + 10; //生成10到16之间的随机数 String str_r3 = rBase[r3]; // 生成第2位的位码 int r4; if (r3 == 10) { r4 = random.nextInt(15) + 1; //生成1到16之间的随机数 } else if ...

    java扔骰子实例

    //随机数对象 int computerSUM=0; int userSUM=0; int sum = 500; //用户总分 int pay = 0; //用户押分 int[]computRa=new int[3]; int[]userInput=new int[3]; int wanfa=0; int computerwin=0; int userwin=0; ...

    Java生成随机认证码

    // 随机产生155条干扰线,使图象中的认证码不易被其它程序探测到 g.setColor(getRandColor(160,200)); for (int i=0;i;i++) { int x = random.nextInt(width); int y = random.nextInt(height); int xl = random....

    java 语言实现的随机数生成算法

    //生成随机数 调用的是系统的方法 public class random { public static void main(String args[]) { Random random=new Random(5); for(int i=0;i<10;i++) { System.out.println(random.nextInt()); }...

    采用ajax实现的图片验证码

    2、在产生背景之后,编写如下代码,产生四个字符(并且,把生成字符,保存在session中,在登录的时候用来做判断) String code=""; //用于保存生成的四个字符 for(int i=0;i;i++){ //生成一个随机数,它的...

    Java 小项目 飞机大战源码(已测试无BUG)

    public FlyingObject(int width,int height,int x,int y){ this.width = width; this.height = height; this.x = x; this.y = y; } /** 读取图片 */ public static BufferedImage loadImage(String ...

    Java 按规则将数据插入到数组中.rar

     {//长生10个随机数,并赋给数组arr   arr[i] = r.nextInt(1000);  }  //输出数组arr中的元素  for(int j = 1;j ;j )  {   System.out.print(arr[j] "\t");  }  //将数组arr中的元素按升序排列

    实现接收手机号验证,并发送6位数验证码

    使用路径传递方式,实现接收手机号码获取获取6位验证码后端接口功能。。 1)手机号码不用验证是否正确 2)得到0-9之间的随机数: Random random = new Random();... int a=random.nextInt(10);

    Android代码-Android-LuckyMonkeyPanel

    int stayIndex = new Random().nextInt(8);//这里为了演示取得随机数 lucky_panel.tryToStop(stayIndex);//stayIndex 为最后停止的位置 关于我 如果对你有帮助,请 star 一下,然后 follow 我,给我增加一下分享动力...

    JAVA——linux

    //随机数:0~32 }while(used[idx]);//如果使用了,继续找下一个 used[idx] = true;//标记使用了 all[i] = red[idx];//取出一个未使用的红球 } all[all.length-1] = "99"; //System.out.println(Arrays.toString...

    Java开发的小游戏 仿坦克大战

    if(r.nextInt(40) > 38){ //随机调用move()方法 move(); } } // 行走的随机数 private static Random r=new Random(); private void move() { step ++; if(step == pos.length){ step = 0; } ...

    如何随机选取一个机器的ip

    int iRandom = new Random().nextInt(ipArr.length)%(ipArr.length); // 0、1的随机数 String ip =ipArr[iRandom]; System.out.println(ip); 此方法可用于当需要负载均衡时,即想选择多台机器来处理程序执行。 随机...

    AnotherRandomGenerator

    另一个随机生成器 随机变化活动 以下代码是我们上次的程序,它会生成一个1到6... int randomInt = 1 + rnd.nextInt(6); System.out.println("Generated number: " + randomInt); } System.out.println("Done."); } }

    java时间格式大全(算法源码)

    java时间格式大全(算法源码) java,date,时间,时间格式,算法源码 ... int subYear = cal1.get(Calendar.YEAR) - cal2.get(Calendar.YEAR); if (0 == subYear) { if (cal1.get(Calendar.WEEK_OF_YEAR) == ...

Global site tag (gtag.js) - Google Analytics