Java - 数组 - 检查相同输入中的重复项

时间:2016-10-19 12:08:32

标签: java arrays duplicates

我试图从1到40获取密码,而不是重复任何数字。我如何比较每一个而不是重复?

我已经广泛浏览了Java文档并询问了我的讲座,但我找不到合适的答案。我理解这个概念,我的意思是做什么,但只是不能正确编码。

这是我的代码:

public static void main(String[] args) {

    int[] secret = new int[5];
    //int[] secret = {0,0,0,0,0};
    int[][] num = new int[3][5];
    int correctL1 = 0;
    int correctL2 = 0;
    int correctL3 = 0;

    for (int i = 0; i<5; i++){ // to get secret numbers.
        secret[i] = (int) ((Math.random() * (40 - 1)) + 1);
    }
    System.out.println(Arrays.toString(secret));
}

我已经尝试将其放入循环中以获取另一个数字,但它仍然给我重复。

if(((secret[i] == secret[0]) || (secret[i] == secret[1]) || 
    (secret[i] == secret[2]) || (secret[i] == secret[3]) ||
    (secret[i] == secret[4])) || (secret[i] != 0)) {

    secret[i] = ((int) ((Math.random() * (40 - 1)) + 1));
}

5 个答案:

答案 0 :(得分:3)

在Java 8中,您可以使用Random#ints轻松生成一系列不同的随机数:

int[] secret = new Random().ints(1, 40).distinct().limit(5).toArray();

Ideone Demo

否则,您可以使用Set<Integer>循环生成while

Set<Integer> secret = new HashSet<>();
Random gen = new Random();
while (secret.size() < 5) {
    secret.add(gen.nextInt(40 - 1) + 1);
}

答案 1 :(得分:3)

只要生成的数字是生成数字的一部分,只需使用Set<Integer>保留已生成的数字并进行迭代。

Set<Integer> existing = new HashSet<>();
for (int i = 0; i<5; i++){ // to get secret numbers.
    // Loop until the generated number is not part of the already generated numbers
    int value;
    do {
        value = (int) ((Math.random() * (40 - 1)) + 1);
    } while (!existing.add(value));
    secret[i] = value;
}

答案 2 :(得分:2)

为什么不创建Set<Integer>(这样你就不会重复)并迭代直到它的大小为5?

答案 3 :(得分:0)

只需使用Set Collection ..为了获得更好的性能,您可以使用下面的代码

Set<Integer> data=new HashSet<Integer>();

如果要按升序获取所有元素,可以使用TreeSet

OR其他逻辑是每个集合都包含返回布尔值的方法,例如data.contains(o)

答案 4 :(得分:0)

while(true){
        int[] secret = new int[5];
        for (int i = 0; i < 5; i++) { // to get secret numbers.
            secret[i] = (int) ((Math.random() * (40 - 1)) + 1);
        }
        System.out.println("Array:" + Arrays.toString(secret));
        Set<Integer> mySet = new HashSet<Integer>();
        for (int i = 0; i < 5; i++) { // to get secret numbers.
            mySet.add(secret[i]);
        }
        if (mySet.size() == secret.length) {
            System.out.println("OK");
            break;
        } else {
            System.out.println("Not ok");
        }
    }