尝试获取数组的非重复随机数

问题描述 投票:0回答:1

我通过包含一个数组重新尝试了以前的问题。该程序没有错误,但数字仍然重复。这是我的代码:

public static String ball() {
        String var = null;
        int ranVar[] = new int[75];
        final Random ran = new Random();
        int temp;

        for (int i = 0; i < ranVar.length; i++) {
            do {
                temp = ran.nextInt(74) + 1;
            } while (match(temp, ranVar));
            ranVar[i] = temp;
            if (ranVar[i] <= 15) {
                return var = "B" + ranVar[i];
            } else if (ranVar[i] <= 30) {
                return var = "I" + ranVar[i];
            } else if (ranVar[i] <= 45) {
                return var = "N" + ranVar[i];
            } else if (ranVar[i] <= 60) {
                return var = "G" + ranVar[i];
            } else if (ranVar[i] <= 75) {
                return var = "O" + ranVar[i];
            }

        }

        return null;
    }

    private static boolean match(int temp, int var[]) {
        for (int i = 0; i < var.length; i++) {
            if (temp == var[i]) {
                return true;
            }
        }
        return false;
    }

感谢您的帮助。

java arrays random repeat
1个回答
0
投票

在线评论


    // Seed your random number generator
    final static Random ran = new Random(System.currentTimeMillis());

    // create a set to store previously generated random numbers
    static Set<Integer> usedIntegers = new HashSet<>();

    // generate numbers until a number is found which is not been selected
    public static int nextAvailableRandomInteger(){
        int temp;
        do{
            temp = ran.nextInt(74) + 1;
        } while (usedIntegers.contains(temp));
        usedIntegers.add(temp);
        return temp;
    }


    // I have no idea what this method does. So I changed the random number generator part.
    public static String ball() {
        String var = null;
        int ranVar[] = new int[75];

        int temp;

        for (int i = 0; i < ranVar.length; i++) {
            do {
                temp = nextAvailableRandomInteger();
            } while (match(temp, ranVar));
            ranVar[i] = temp;
            if (ranVar[i] <= 15) {
                return var = "B" + ranVar[i];
            } else if (ranVar[i] <= 30) {
                return var = "I" + ranVar[i];
            } else if (ranVar[i] <= 45) {
                return var = "N" + ranVar[i];
            } else if (ranVar[i] <= 60) {
                return var = "G" + ranVar[i];
            } else if (ranVar[i] <= 75) {
                return var = "O" + ranVar[i];
            }

        }

        return null;
    }

    private static boolean match(int temp, int var[]) {
        for (int i = 0; i < var.length; i++) {
            if (temp == var[i]) {
                return true;
            }
        }
        return false;
    }

    // I have no idea what this method does. So I changed the random number generator part.
    public static String ball() {       
        String var = null;
        int ranVar[] = new int[75];

        int temp;

        for (int i = 0; i < ranVar.length; i++) {
            do {
                temp = nextAvailableRandomInteger();
            } while (match(temp, ranVar));
            ranVar[i] = temp;
            if (ranVar[i] <= 15) {
                return var = "B" + ranVar[i];
            } else if (ranVar[i] <= 30) {
                return var = "I" + ranVar[i];
            } else if (ranVar[i] <= 45) {
                return var = "N" + ranVar[i];
            } else if (ranVar[i] <= 60) {
                return var = "G" + ranVar[i];
            } else if (ranVar[i] <= 75) {
                return var = "O" + ranVar[i];
            }

        }

        return null;
    }

    private static boolean match(int temp, int var[]) {
        for (int i = 0; i < var.length; i++) {
            if (temp == var[i]) {
                return true;
            }
        }
        return false;
    }

PS:这不是最好的方法。最终,该集合将填充75个数字,并且没有退出循环的方法,该程序将无限期运行。改善此状况的一种方法是生成一个数字列表,然后从该列表中进行选择,然后删除使用的数字,这样,当您进入空白列表时,游戏就会停止。

© www.soinside.com 2019 - 2024. All rights reserved.