模拟彩票大乐透

299 阅读1分钟
package day0819;

import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.Arrays;

public class demo08 {
    public static void main(String[] args) {
        play();
    }

    // 机选
    public static void play() {
        NumberFormat format = new DecimalFormat("###,###");
        int playNum = 100000000;
        int[] targetArr1 = {3, 4, 7, 12, 19};
        int[] targetArr2 = {2, 5};
        long num = 0;
        boolean flag = false;

        for (int i = 0; i < playNum; i++) {
            int[] a = Arrays.copyOf(getRandomArr(5, 35), 5);
            int[] b = Arrays.copyOf(getRandomArr(2, 12), 2);
            num++;
            System.out.print(Arrays.toString(a) + " " + Arrays.toString(b) + "\t\t第" + format.format(num) + "注\n");
            if (compare(a, targetArr1) && compare(b, targetArr2)) {
                flag = true;
                break;
            }
        }
        if (flag) {
            System.out.println("\n中奖了!共投了" + format.format(num) + "注,花费" + format.format(num * 2) + "元");
            System.out.println("目标号码是:" + Arrays.toString(targetArr1) + Arrays.toString(targetArr2));
        } else {
            System.out.println("\n未中奖,共投了" + format.format(num) + "注,花费" + format.format(num * 2) + "元");
            System.out.println("目标号码是:" + Arrays.toString(targetArr1) + Arrays.toString(targetArr2));
        }
        System.out.println("\n退出游戏");
    }

    // 几选几 a是选几个,b是1-b内选择
    public static int[] getRandomArr(int a, int b) {
        int[] randomArr = new int[a];
        int rNum = -1;
        for (int i = 0; i < a; i++) {
            do {
                rNum = getRandomNum(1, b);
            } while (isInArr(randomArr, rNum));
            randomArr[i] = rNum;
        }
        return randomArr;
    }

    // 比较两个数组内容是否相等,乱序
    public static boolean compare(int[] a, int[] b) {
        Arrays.sort(a);
        Arrays.sort(b);
        for (int i = 0; i < a.length; i++) {
            if (a[i] != b[i]) {
                return false;
            }
        }
        return true;
    }

    // 得到随机数
    public static int getRandomNum(int min, int max) {
        return (int) (min + Math.random() * (max - min + min));
    }

    // 判断该元素在数组内是否重复
    public static boolean isInArr(int[] a, int b) {
        for (int j : a) {
            if (j == b) {
                return true;
            }
        }
        return false;
    }

}