抽奖程序

抽奖程序

周作业2:

编写一个抽奖程序, 运行的时候会随机输出一个由0和1组成的 16 位序列, 比如 1011001000011100, 0101011101010101 等
如果得到序列中有 8个连续的1 则输出一等奖, 7个 则输出 二等奖,6 个则输出三等奖 , 否则输出没有中奖

说一下思路:刚开始看到16位,01,我直接就想到了用一个2个字节的数据装一个数,然后把这个数转成二进制不就行了吗。然后又想,两个字节的数据有char和short,但是这两个数据好像都没有直接转二进制的方法,包装类也没有,Integer类倒是有,但是,转出来的数据长度不符合要求,还得处理一下,感觉麻烦了。索性直接用比较狂野的方法–字符串拼接。我连续生成16个01的随机数拼接起来不也行吗。然后看另一个要求,要求分析连续的1的个数,根据个数来颁奖,记住是连续,刚开始没看清我还以为是有多少个1。既然是连续,我想到把这一串01从左开始数,有1就开始一个临时计数,直到遇到0,临时计数结束,进行判断和临时计数归零,有一个最大值变量,如果临时计数结束进行判断大于最大变量,那么把临时计数的值赋给最大变量。这样我们就能得到最大的那一串连续的1的个数,最后根据最大变量的值进行输出不就行了吗。

个人觉得挺好理解的,画图有点没必要,就直接上代码吧。

下面是我的代码:

import java.util.Random;

public class Test4 {
	public static void main(String[] args) {
		System.out.println("抽奖程序开始....");
		String code=" ";
		int num1=0,num2=0;
		Random s=new Random();
		int[] sd=new int[16];
		
		for(int i=0 ;i<16;i++) {
		sd[i]=s.nextInt(2);
		code+=sd[i];
		}
        
		for(int j=0;j<16;j++) {
			if(sd[j]==1) {
				num1++;	
			}
			else {
				if(num1>num2) {
					num2=num1;
				}
				num1=0;
			}
		}
		 
		System.out.println("你的抽奖码为:"+ code);
		System.out.println(num2);
		if(num2==8) {
			System.out.println("恭喜你获得一等奖");
		}
		else if(num2==7) {
			System.out.println("恭喜你获得二等奖");
		}
		else if(num2==6) {
			System.out.println("恭喜你获得三等奖");
		}
		else {System.out.println("很遗憾!你没有获奖");}
	}
	
}

下面是程序运行结果:
在这里插入图片描述

个人作业,仅供参考,我相信肯定还会有更好的方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值