java随机生成数字可控制范围

java随机生成数字可控制范围


我们以双色球为列:
————————前区———————蓝球为9
本期开奖为:3,8,10,15,25,33,9
前区每个数最大为33、蓝球最大为16
随机生成7个数看看多少次可以生成出来一样的数

//随机数生成方法
private static List<Integer> test(){
	//使用Random对象
	Random random = new Random();
	//会生成0-32的数字,所以结果要加1
	int i1 = random.nextInt(33)+1;//第一个数
	int i2 = random.nextInt(33)+1;
	int i3 = random.nextInt(33)+1;
	int i4 = random.nextInt(33)+1;
	int i5 = random.nextInt(33)+1;
	int i6 = random.nextInt(33)+1;
	//前区6个球生成完成(会有重复的数字)
	/*
		如果不想要重复的数字可以
		生成一个数字就放入到集合中
		生成下一个的时候判断下集合中是否存在就可以了
	*/
	
	//怎样生成 50-100 之间的随机数呢包括 50 和 100
	//生成 0-50 的数字然后在加50就可以了
	//random.nextInt(51)+50;
	
	//创建个集合存放结果
	List<Integer> list = new ArrayList<>();
	list.add(i1);
	list.add(i2);
	list.add(i3);
	list.add(i4);
	list.add(i5);
	list.add(i6);
	//对集合排下序小数在前面
	Collections.sort(list);
	//在生成蓝球放入集合
	int i7 = random.nextInt(16)+1;
	list.add(i7);
	return list;
}
//测试生成多少次可以生成出来这注:3,8,10,15,25,33,9
 public static void main(String[] args) {
	//将这注放入集合
	List<Integer> new1 = liatAdd(3,8,10,15,25,33,9);
	
	//循环生成并记录多少次可以生成出来这注
	Integer ci = 0;		//记录生成了多少次
	boolean ok = true;
	while (ok){
		cc++;	//每次生成时加一
		//获取生成的方法
		List<Integer> test = test();
		boolean is = true;
		//循环判断每个数字
		for (Integer j = 0; j < test.size(); j++) {
			if (test.get(j) == new1.get(j)){
				is = true;
			}else {
				//有个数字不一样跳出循环、随机生成再进行循环
				is = false;
				break;
			}
		}
		if (is){
			System.out.println("随机生成ok:"+test.toString()+"循环生成次数:"+cc);
			//结束循环
			ok = false;
		}
	}
	//输出结果可能是:随机生成ok:[3, 8, 10, 15, 25, 33, 9]循环生成次数:91581578		(9千万次)
	
	
	
	//若是Integer最大值140000000不够使用的话可以换成BigInteger(最大值我也不知道那是什么单位反正肯定够用)
	//这里就不改变量名了会与上面重名循环里面创建的变量重名肯定没事
	BigInteger big = new BigInteger("0");	//初始化
	BigInteger addVal = new BigInteger("1");	//每次加的值
	boolean ok = true;
	while (ok){
		big = bid.add(addVal);//每次加1
		List<Integer> test = test();
		boolean is = true;
		//循环判断每个数字
		for (Integer j = 0; j < test.size(); j++) {
			if (test.get(j) == new1.get(j)){
				is = true;
			}else {
			//有个数字不一样跳出循环、随机生成再进行循环
				is = false;
				break;
			}
		}
		if (is){
			System.out.println("随机生成ok:"+test.toString()+"循环生成次数:"+he.abs());
			//结束循环
			ok = false;
		}
	}
	//输出结果可能是:随机生成ok:[3, 8, 10, 15, 25, 33, 9]循环生成次数:3059459492		(30亿)
 }
 //将数字追加到集合中,并返回集合
 private static List<Integer> liatAdd(
            int n1,
            int n2,
            int n3,
            int n4,
            int n5,
            int n6,
            int n7
            ){
        List<Integer> list = new ArrayList<>();
        list.add(n1);
        list.add(n2);
        list.add(n3);
        list.add(n4);
        list.add(n5);
        list.add(n6);
        list.add(n7);
        return list;
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值