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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • XOR运算

    XOR运算近来做了一些题目和异或运算有关的题目,总结一下Xor按位异或符号在编程语言中通常是^数学符号通常用⊕表示X=0101BY=1011BXYX⊕B101110000011X^Y=1110B性质1.0^0=02.a^a=03.0^1^2…^n的性质先观察一下如下的序列我…

    2022年7月16日
  • Android 11 应用兼容性适配,看这篇就够了

    Android 11 应用兼容性适配,看这篇就够了本文档基于谷歌Android11DeveloperPreview4(DP4)版本的变更输出一、兼容性调试工具Android11引入了新的工具,用于针对最新版平台中的行为变更来测试和调试应用。这些工具属于新的兼容性框架的一部分,可让应用开发者单独开启和关闭各项变更。有了这种灵活性,您可以关闭单项变更,然后继续针对平台中的其他变更测试应用;也可以每次单独针对一项行为变更测试应用。不管是影响所有应用的行为变更还是只影响以Android11为目标平台的应用的行为变更,您都可以随意开启或关

    2022年7月13日
  • c语言的单片机编曲,要的就是强大……C语言编的《最炫民族风》(转)[通俗易懂]

    c语言的单片机编曲,要的就是强大……C语言编的《最炫民族风》(转)[通俗易懂]该楼层疑似违规已被系统折叠隐藏此楼查看此楼—————————————————————————————————-以下是读入的内容————《最炫民族风》:36,s6,s132s2ss3ss2s1s2s1s6,36,s6,s135s2…

    2022年9月13日
  • import sun.misc.BASE64Encoder;报错

    import sun.misc.BASE64Encoder;报错详情见:https://blog.csdn.net/Carrie_zzz/article/details/78821469当我们要兼容火狐浏览器的时候需要用到BASE64Encoder。此时要导入这个包importsun.misc.BASE64Encoder;莫名奇妙的错了。这是因为这个类不属于JDK标准库范畴,但在JDK中包含了该类,可以直接使用。但是在eclipse中直接使用却报…

    2022年6月25日
  • IntelliJ IDEA 部署Tomcat服务器

    IntelliJ IDEA 部署Tomcat服务器一、部署TomcatFile—&gt;Build,Executtion,Deployment—&gt;Application Servers—&gt;Apply—&gt;ok然后点击Run—&gt;Edit Configurations点击“+”,然后选择Tomcat Servers—&gt;local选择Development  再选择Server  ,热处理那个选项是下…

    2022年6月13日
  • matlab初学者入门_什么一闻就能睡2小时

    matlab初学者入门_什么一闻就能睡2小时目录零基础入门matlab前言1.界面认识2.变量命名3.数据类型4.元胞数组和结构体5.矩阵操作6.程序结构7.基本绘图操作7.1.二维平面绘图7.2.三维立体绘图8.图形的保存与导出9.补充零基础入门matlab前言这篇文章很适合MATLAB的入门学习,这也是我在入门时学习的笔记。虽然说是”零基础“入门matlab,但是如果有其它编程语言基础的话,学起来自然会更轻松。特别鸣谢:B站UP主——爱研究的小阿楠1.界面认识2.变量命名注:Matlab中的注释%%独占一行的注释(有上下横线

    2022年9月16日

发表回复

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

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