如何使用for循环从数组中删除重复项

时间:2016-02-28 22:32:35

标签: java arrays random

在这段代码中,我发现了一个数组的重复项,我想删除它们。然后输出将是唯一生成的数字。我需要使用math.random和modulo。有人有任何线索吗?我试图将它们存储在一个数组中但是原始数组的0和0是我的域的一部分,用于生成随机数(从0到52)。

public class Decks {

 public static void main(String[] args) {

generate();

}

 public static void generate() {
int deckOfCard[] = new int[52];

for (int counts = 0; counts < 52; counts++) {

    deckOfCard[counts] = (int) (Math.random() * 51);

}

for (int i = 0; i < deckOfCard.length - 1; i++) {

    for (int j = i + 1; j < deckOfCard.length; j++) {

        if ((deckOfCard[i] == (deckOfCard[j])) && (i != j)) {

            System.out.println("DUPLICATE " + deckOfCard[i]);

        }
    }
}

for (int count = 0; count < deckOfCard.length; count++) {

    System.out.print("\t" + deckOfCard[count]);

}
}

3 个答案:

答案 0 :(得分:1)

为什么不尝试使用HashSet而不是数组?如您所知,设置只存储唯一值,因此您不会有任何重复。

答案 1 :(得分:0)

必须验证生成的生成的数字,如下所示:

import java.util.Random;
public class Decks {
    public static void main(String[] args) {

        Random myRandom = new Random();

        int[] num = new int[53];

        boolean[] check = new boolean[53];
        int all = 0;
        int ranNum;

        while (all < 53) {
            ranNum = myRandom.nextInt(53);
            if (!check[ranNum]) {
                check[ranNum] = true;
                num[all] = ranNum;
                all++;
            }
        }
        for (int i = 0; i < 53; i++) {
            System.out.println(num[i]);
        }
    }
}

我建议不要包含数字0,因为它不存在于真正的牌组中(ACE是数字值为1的最低值)。我只是把它包含在这里,因为根据我的理解,0包含在您想要的输出中。

答案 2 :(得分:0)

考虑到时间复杂度,您可以先对它们进行排序,最好在nlogn时间内进行排序,然后使用O(1)查找重复的元素。