题目:

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即为中奖号码个数。

思路问题:没考虑到数据长度可能为个位数,且截取数据两边可能有相等数据。