java - 查找和删除数组的重复元素

标签 java arrays

我正在创建一个彩票类来生成 5 个唯一的彩票号码(不重复使用过的数字)。我在定位和删除数组中的任何重复项时遇到问题。我错过了什么?

public class Lottery {
    private int lotteryNumber[] = new int[5];

    public Lottery() {
        Random myRan = new Random();

        for (int i = 0; i < lotteryNumber.length; i++) {
            lotteryNumber[i] = myRan.nextInt(9) + 1;
            for (int j = i + 1; j < lotteryNumber.length; j++) {
                if ((lotteryNumber[i] == (lotteryNumber[j])) && (i != j)) {
                    System.out.println("Duplicate Element is : " + lotteryNumber[i]);
                    i--;
                }
            }
            System.out.println(lotteryNumber[i]);
        }
    }
}

尽管我做出了努力,它仍继续打印出重复项。预先感谢您的帮助

最佳答案

我会使用 LinkedHashSet<Integer> 生成所需的位数(然后您可以将其转换为数组并保留原始顺序)。类似的东西,

final int len = 5;
Random rand = new Random();
Set<Integer> set = new LinkedHashSet<>(len);
while (set.size() < len) {
    set.add(rand.nextInt(10));
}
Integer[] arr = set.toArray(new Integer[len]);
System.out.println(Arrays.toString(arr));

洗牌 10 位数字并取前五位。有点像

Integer[] digits = new Integer[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
Collections.shuffle(Arrays.asList(digits));
Integer[] lottery = Arrays.copyOf(digits, 5);
System.out.println(Arrays.toString(lottery));

关于java - 查找和删除数组的重复元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33924927/

相关文章:

javascript - 如何为 .push 函数创建数组。获取 "typeError: .push is not a function"?

泛型类中的 Java 泛型方法

java - 如何使用 fireauth 确认登录以确认密码是否正确

java - 获取信号强度

c++ - 如何将字符串转换为字符矩阵

android - 如何在微调器上分配嵌套数组数据?

java - 如何解决 "The required mechanism ' BASIC' 在 HttpAuthenticationFactory 的机制 [KEYCLOAK] 中不可用”

java - 如何在正则表达式中包含行尾符号 ("\n")

python - 同时并行读取 numpy 数组

java - 根据字符串数组的顺序重新排序 ArrayList - Java