使用数组生成非重复数字,而不是ArrayList<>在爪哇

时间:2015-04-29 03:21:09

标签: java arrays arraylist

我正在进行旧的 Lotto 练习,我需要专门使用整数的 Array [] ,而不是 ArrayList 。我有我认为会起作用,但我似乎错了。我找了类似这些的帖子,所有这些帖子都涉及 ArrayList<> 。这是我的代码的分区。

Integer[] lottoNums;
lottoNums = new Integer[7];

for(int i = 0; i < lottoNums.length; i++){

    lottoNums[i] = randomNums.nextInt((59)+1);


    if(i <= 5) {
        if(lottoNums[i].equals(lottoNums[i+1])){
            if(lottoNums[i] < 58 && lottoNums[i] > 1)
                lottoNums[i] = lottoNums[i] +1;
        }
    }
    else if(i >= 1) {
        if(lottoNums[i].equals(lottoNums[i-1])){
            if(lottoNums[i] < 58 && lottoNums[i] > 1)
                lottoNums[i] = lottoNums[i] +1;
        }
    }
}

Arrays.sort(lottoNums);
System.out.print("Winning numbers: "+lottoNums[0]);
for (int i = 1; i < 6; i++) { 
     System.out.print(", " + lottoNums[i]);
}
System.out.print(System.getProperty("line.separator"));
System.out.println("Bonus Number: "+lottoNums[6]);

我需要让它在159之间生成一个数字,而不是重复。我试图将它与存储在元素之前和之后的值(如果它有一个)配对,如果它等于它,它将添加1。我运行了几次,每隔一段时间我仍然会得到重复的数字。我怎样才能有效地使用 Arrays []整数?

编辑:

初始化数组,用于删除NullPointerException。

更新的代码:

for(int i = 0; i < lottoNums.length; i++){

        lottoNums[i] = randomNums.nextInt((59)+1);

    }
for (int i = 0; i < 6; i++) {
           int rnd = randomNums.nextInt((lottoNums).length-i);
           int k = lottoNums[lottoNums.length-i-1];
           lottoNums[lottoNums.length-i-1] = lottoNums[rnd];
           lottoNums[rnd] = k;
        }

    Arrays.sort(lottoNums);
    System.out.print("Winning numbers: "+lottoNums[0]);
    //PRINTING LOTTO NUMBERS
    for (int i = 1; i < 6; i++) { 
         System.out.print(", " + lottoNums[i]);
    }
        System.out.print(System.getProperty("line.separator"));
        System.out.println("Bonus Number: "+lottoNums[6]);

2 个答案:

答案 0 :(得分:0)

您可以通过每次都使用数组中的最后一个数字切换所选数字,然后从尚未存储的前缀中选择下一个数字来执行此操作:

for (int i = 0; i < 6; i++) {
   int rnd = randomNums.nextInt(numbers.length-i);
   int k = numbers[numbers.length-i-1];
   numbers[numbers.length-i-1] = numbers[rnd];
   numbers[rnd] = k;
}

在此循环结束时,您选择的数字将为数字[numbers.length-7..numbers.length-1]等。

答案 1 :(得分:0)

我会使用两个数组。每次绘制数字时,请查看它是否存在于第二个数组中。如果不使用它并将其添加到第二个数组。