我是Java的新手,我正尝试将游戏的非重复数字随机化。仅当我不添加break语句时,我的代码才会生成从1到75的唯一随机数(我必须这样做才能同时获得一个数字)。我该怎么办?编辑-(我想知道它是否保持重置的原因是因为我多次调用该方法吗?我不太确定如何解决该问题)
public static void genNumber() {
Random random = new Random();
int num;
String u;
String letter = "";
HashSet<Integer> used = new HashSet<>(75);
for (int i = 1; i <= 75; i++){
ball.add(i);
}
while(used.size() > 0) {
num = 1 + random.nextInt(75);
if (used.contains(num)){
used.remove(new Integer(num));
u = Integer.toString(num);
System.out.print(u + "\n");
break;
}
if (!used.contains(num)){
continue;
}
}
数字是唯一且随机的,但我一次只想要一个数字(不重复),一次也不希望全部是75。
答案 0 :(得分:1)
也许每次您想要一个新的随机序列(如一副纸牌)时都对列表进行混洗。每个元素都保证是唯一的。
List<Integer> balls = new ArrayList<>();
for (int i = 1; i <= 75; ++i) {
balls.add(i);
}
for (;;) {
// Shuffle the list every 75 draws:
Collections.shuffle(balls);
System.out.println(Arrays.toString(balls.toArray()));
// Consume the sequence
for (Integer ball : balls) {
take(ball);
}
}
答案 1 :(得分:0)
我将创建一个由75个元素组成的布尔值数组,并将所有值设置为true。创建一个生成一个随机数的方法,并将该布尔数组的值更新为false。每次生成数字时,请检查数组以查看该值是否设置为true。然后,您可以一次生成一个数字,而不必担心重复。您可以有一个while循环,要求用户输入yes或no,如果用户回答no,则不会调用您的方法并将while循环条件设置为false。如果他们回答“是”,则它将调用该方法并保持循环。