在这段代码中,我发现了一个数组的重复项,我想删除它们。然后输出将是唯一生成的数字。我需要使用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]);
}
}
答案 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)查找重复的元素。