我正在进行旧的 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]);
我需要让它在1
和59
之间生成一个数字,而不是重复。我试图将它与存储在元素之前和之后的值(如果它有一个)配对,如果它等于它,它将添加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]);
答案 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)
我会使用两个数组。每次绘制数字时,请查看它是否存在于第二个数组中。如果不使用它并将其添加到第二个数组。