Random的nextInt用法

Random的nextInt用法因为想当然的认为Random类中nextInt()(注:不带参数),会产生伪随机的正整数,采用如下的方式生成0~99之间的随机数: Randomrandom=newRandom(); System.out.println(random.nextInt()%100);但是在运行的时候,发现上面的方法有时会产生负数,通过查看Random类的源代码才发现,不

大家好,又见面了,我是你们的朋友全栈君。

因为想当然的认为Random类中nextInt()(注:不带参数),会产生伪随机的正整数,采用如下的方式生成0~99之间的随机数:

	Random random = new Random();    	System.out.println(random.nextInt() % 100);

但是在运行的时候,发现上面的方法有时会产生负数,通过查看Random类的源代码才发现,不带参数的nextInt会产生所有有效的整数,所以当然会有负数产生了。

正确的解法应该是:

	Random random1 = new Random();	System.out.println(random1.nextInt(100)); //100是不包含在内的,只产生0~99之间的数。

应用:

生成乱序不重复数组

package com.cn.wuliu.utils;import java.util.Random;public class Arith {      //对给定数目的自0开始步长为1的数字序列进行不重复乱序      public static int[] getSequence(int maxnum) {          int[] sequence = new int[maxnum];          for(int i = 0; i < maxnum; i++){              sequence[i] = i;          }//         System.out.println(Arrays.toString(sequence));//		[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]          Random random = new Random();          for(int i = 0; i < maxnum; i++){              int p = random.nextInt(maxnum);              int tmp = sequence[i];              sequence[i] = sequence[p];              sequence[p] = tmp;          }          random = null;          return sequence;      } 	//对给定数目的自minnum开始步长为1到maxnum的数字序列进行不重复乱序	public static int[] getSequence(int minnum,int maxnum) {    	  int num = maxnum - minnum + 1;          int[] sequence = new int[num];          for(int i = 0; i < num; i++){              sequence[i] = i + minnum;          }//          System.out.println(Arrays.toString(sequence));          Random random = new Random();          for(int i = 0; i < num; i++){              int p = random.nextInt(num);              int tmp = sequence[i];              sequence[i] = sequence[p];              sequence[p] = tmp;          }          random = null;          return sequence;      }       public static void main(String[] agrs){    	  Arith arith = new Arith();    	  int[] i = arith.getSequence(10);    	  for(int n=0;n<i.length;n++){    		  System.out.print(i[n]);    	  }    	  System.out.println();    	  int[] j = arith.getSequence(3,8);    	  for(int n=0;n<j.length;n++){    		  System.out.print(j[n]);    	  }      }}




版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/162889.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • mac phpstorm 2021 激活码破解方法[通俗易懂]

    mac phpstorm 2021 激活码破解方法,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月15日
    407
  • C++利用stringstream进行类型转换「建议收藏」

    C++利用stringstream进行类型转换「建议收藏」利用STL中sstream库的字符串流(stringstream)可以非常方便地进行类型转换,尤其是字符串和数字的转换。例:整型和字符串类型的相互转化#include&lt;sstream&gt;//开头记得加上这个//整型转换为string类型stringint2string(intnum){stringstreamss;ss&lt;&lt;num…

    2022年5月18日
    39
  • jQuery网页版五子棋小游戏源码下载

    体验效果:http://hovertree.com/texiao/game/4/网页五子棋源代码:jquery五子棋游戏-黑子白子先手后手开始胜率:100%更多:http://www.cnblogs

    2021年12月21日
    41
  • Android应用setContentView与LayoutInflater加载解析机制源码分析

    Android应用setContentView与LayoutInflater加载解析机制源码分析【工匠若水http://blog.csdn.net/yanbober转载烦请注明出处,尊重分享成果】1背景其实之所以要说这个话题有几个原因:理解xml等控件是咋被显示的原理,通常大家写代码都是直接在onCreate里setContentView就完事,没怎么关注其实现原理。前面分析《Android触摸屏事件派发机制详解与源码分析三(Activity篇)》时提到了一些关于布局嵌套的问题,当

    2022年6月26日
    22
  • maven配置多仓库镜像「建议收藏」

    maven配置多仓库镜像「建议收藏」问题场景:1、国内访问maven默认远程中央镜像特别慢2、用阿里的镜像替代远程中央镜像3、大部分jar包都可以在阿里镜像中找到,部分jar包在阿里镜像中没有,需要单独配置镜像我想达到的目标:在maven中配置一主一副两个镜像,大部分jar直接通过主镜像可以找到,部分特殊jar在主镜像中找不到时,自动去副镜像中寻找。我所处的阶段:修改了maven的全局配置文件settin…

    2022年5月28日
    149
  • navicat15万能激活码-激活码分享

    (navicat15万能激活码)这是一篇idea技术相关文章,由全栈君为大家提供,主要知识点是关于2021JetBrains全家桶永久激活码的内容IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.htmlFZP9ED60OK-eyJsa…

    2022年4月1日
    2.2K

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号