抽奖程序
周作业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("很遗憾!你没有获奖");}
}
}
下面是程序运行结果:
个人作业,仅供参考,我相信肯定还会有更好的方法。