Java Random-随机数

获取随机数方法:

第一种: 使用java.util.Random类实现

  • 这里所要说明的是以下面的代码为例:
Random rm=new Random();//无种子
rm.nextInt(100);
  • 这行代码将生成范围0~100 之间的随机数,有趣的是,取值可能为 0 ,但不可能为 100。我们用中学数学课学习的区间表示法,表示为:[0, 100)。
    区间 [0, 100) 内的整数,实际上就是区间 [0, 99]。因为最大边界为100,不能等于100,因此最大可能 产生"整数"就是99。

  • 既然rand.nextInt(100) 获得的值是区间 [0, 99],那么在这个区间左右各加 1,就得到了区间 [1, 100]

  • 例如:获取[1-100]区间的随机数:

rm.nextInt(100)+ 1;

不过这里也有所限制,如果按照上述继续,如果想要从2(记作start)开始到100之间的随机数我第一次写成,后来推算觉得不对:

rm.nextInt(100)+2;

这里()括号里表示的是:

从0开始加括号里的个数,所以最后的100会被漏掉,达到1-100之间随机数是通过+1来补充。
但是如果从2开始,+2,start没有问题,但是结尾却增加超过100。成为[2-101]之间的数。
所以修改:2-100之间的随机数应为:

rm.nextInt(99)+2//不加2实际范围0-98,加2==>[2-100]

import java.util.HashSet;
import java.util.Random;
/*
 * 编写一个模拟彩票选号程序,从1---32中随机生成6个数(不能重复)
 */
public class javaRandomSet {
	public static void main(String[] args) {
		Set <Integer> set = new HashSet<Integer>();
        Random rm = new Random(System.currentTimeMillis());//这里使用系统时间作为变化的种子,使得每次生成的随机数不相同。
        while (set.size()==6?false:true) 
        {
          set.add(rm.nextInt(32)+1);//默认从0开始
        }
        System.out.println("您获得的号码是:");
        System.out.println(set);
       
    }
}
//这里的不能重使用到了set集合的不重复性

注:如果使用相同的随机种子,相同次数得到的随机数字是相同的,有规律可循,称为伪随机数,而这里使用系统时间作为变化的种子,使得每次生成的随机数不相同。
第二种方法 :使用 Math中的random()方法

import java.util.Scanner;
/*
 * 从键盘输入一个范围[start,end],获取该范围内的随机数
    (int)(Math.random()*(end-start+1)+start;
Math.random() 可以随机产生一个 [ 0 ,1) (左闭右开)之间的随机数 double类型
int random = (int) (Math.random()*10) 随机产生0-9 之间的数字,包括 0 和9
Math.random()*(n-m)+m 随机产生 n-m 之间的数字 包括n 不包括m.
Math.random()*(n+1-m)+m 随机产生 n-m 之间的数字 包括 n 和 m.
如果是n+1,因为Math.random()产生的是[0,1)之间的数,可能为0,所以不能乘进去。
在外面+m,所以里面-m
例如此题2-100
(100-2+1)+2
(99)+2
从2开始,到100结束.
 */
public class MathRandom {
public static void main (String[] args)
{
	int i=0;
	 Scanner input = new Scanner(System.in);
     System.out.println("请输入取数范围(回车确认)");
     System.out.print("首:");
     int start = input.nextInt();
     System.out.print("尾:");
     int end= input.nextInt();
     System.out.println("十个随机数:");
     for(i= 0; i < 10; i++){//输出十个随机数
         System.out.println(getRandom(start, end) + "\t");  //调用getRandom
     }
}
public static int getRandom(int start, int end){
    return (int)(Math.random() *(end-start+1) + start);//int 类型
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值