题目:
1.投注是从红色球号码中选择6个号码(不能重复),从蓝色球号码中选择1个号码,组合为一注投注号码的投注
2.红色球号码为[1-33],蓝色球号码为[1-16]
3.开奖号码和购彩者号码均随机生成,红球按照从小到大的顺序进行排列,最后额外加入蓝色球
1 2 3 4 5 6 + 1
注意:蓝色球不参与整体的顺序
4.中奖规则如下:
一等奖: 红球6 + 蓝球1
二等奖: 红球6
三等奖: 红球5 + 蓝球1
四等奖: 红球5 或 (红球4 + 蓝球1)
五等奖: 红球4 或 (红球3 + 蓝球1)
六等奖: (红球2 + 蓝球1) 或 (红球1 + 蓝球1) 或 蓝球1
大体思路:
1.使用TreeSet接收红球生成的随机数,可以保证不重复而且会自然排序
2.蓝球由于数量较少,使用String接收
3.中奖只要对应位置的数据一致就好了,可以使用遍历数组进行对比,使用count接收一致的数据个数
4.通过count确认得到几等奖
代码:
public class redAndBlueBall {
public static void main(String[] args) {
//使用TreeSet用来存储生成的数据,其存入的数据不可重复,且存入数据后自动进行自然排序
Collection<Integer> redBall = new TreeSet<>();
//有6个红球,每个红球的数据都要不一样,有时候会出现相同的数据导致集合缺少数据,所以使用循环限制使其仅输出不同的6个数据
while (redBall.size() <= 5) {
redBall.clear();
redBall.add((int) (Math.random() * 33 + 1));
redBall.add((int) (Math.random() * 33 + 1));
redBall.add((int) (Math.random() * 33 + 1));
redBall.add((int) (Math.random() * 33 + 1));
redBall.add((int) (Math.random() * 33 + 1));
redBall.add((int) (Math.random() * 33 + 1));
}
//使用ArrayList来存储生成的数据,方便后续调用get方法
ArrayList<Integer> array = new ArrayList<>(redBall);
//蓝球的数据因为就一个,所以我就使用String接收了,用集合也没有问题
String blueBall = new String((int) (Math.random() * 16 + 1) + "");
System.out.println("红球号码为:" + array);
System.out.println("蓝球号码为:" + blueBall);
//从系统输入选择购买的号码
Scanner scan = new Scanner(System.in);
System.out.println("请输入所选红球:");
int custRed1 = scan.nextInt();
int custRed2 = scan.nextInt();
int custRed3 = scan.nextInt();
int custRed4 = scan.nextInt();
int custRed5 = scan.nextInt();
int custRed6 = scan.nextInt();
System.out.println("请输入所选蓝球:");
String custBlue = scan.next();
//使用ArrayList接收输入的红球数据,方便后续调用get方法
ArrayList<Integer> custBall = new ArrayList<Integer>();
custBall.add(custRed1);
custBall.add(custRed2);
custBall.add(custRed3);
custBall.add(custRed4);
custBall.add(custRed5);
custBall.add(custRed6);
System.out.println(custBall);
//遍历集合,如果集合相同位置的数据相同,则使count+1
int count = 0;
for (int i = 0; i < custBall.size(); i++) {
if (array.get(i).equals(custBall.get(i))) {
count++;
}
}
//根据题目要求判断为几等奖
switch (count) {
case 6:
if (blueBall.equals(custBlue)) {
System.out.println("中一等奖");
break;
} else {
System.out.println("中二等奖");
break;
}
case 5:
if (blueBall.equals(custBlue)) {
System.out.println("中三等奖");
break;
} else {
System.out.println("中四等奖");
break;
}
case 4:
if (blueBall.equals(custBlue)) {
System.out.println("中四等奖");
break;
} else {
System.out.println("中五等奖");
break;
}
case 3:
if (blueBall.equals(custBlue)) {
System.out.println("中五等奖");
break;
}
case 2:
case 1:
if (blueBall.equals(custBlue)) {
System.out.println("中六等奖");
break;
}
default:
System.out.println("对不起您没有中奖");
}
}
}
本人错误思路:
将红球数据生成后存入String中,调用String的截取方法,试用两个字符串最大公共部分的方法找到公共部分,公共部分的长度/2即为中奖号码个数。
思路问题:没考虑到数据长度可能为个位数,且截取数据两边可能有相等数据。