我正在创建一个彩票类来生成 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/