好的,目标是每行生成 6 个随机数。有 x 行数(由用户通过 UserInput 设置)。每行必须有唯一的数字(不重复的数字)。我很确定这些数字是唯一的,但是我似乎无法让它具有多行,而且我一生都无法弄清楚哪个部分阻止了多行。
package rtg;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Random;
import java.util.Set;
public class Array {
public static void main(String[] args) {
String name;
int noTickets;
int[] numbers = new int[6];
Set<Integer> randomNumbers = new HashSet<>();
Random rand = new Random();
int ticketCount = 1;
System.out.println("Please input your name");
name = UserInput.readString();
System.out.println("Please input the number of tickets you want");
noTickets = UserInput.readInt();
System.out.println("___________________________________________\n___________________________________________");
System.out.println("___________________________________________\n___________________________________________");
System.out.println("Name: " +name+ "\nNumber of Tickets: " +noTickets+ "\nNumbers: ");
for (ticketCount = 1; ticketCount <= noTickets; ++ticketCount){
while (randomNumbers.size() < 6) {
randomNumbers.add(rand.nextInt(50) + 1);
}
int i = 0;
for (Integer n : randomNumbers) {
numbers[i++] = n;
}
System.out.print( Arrays.toString(numbers) + "\n");
}
}
}
编辑非常感谢大家,我终于到了那里,结果发现我把数组放在了错误的位置(它在for循环之外,所以只生成了一组随机数)现在修复了它。下一个挑战;有一个比较程序来扫描 90 多个组(每组 6 个唯一数字),并比较其中任何一个是否与不同的组匹配(每行/组 >.<)
最佳答案
您可以将随机整数填充到 Set<Integer>
中直到它有六个元素:
Set<Integer> randomNumbers = new HashSet<>();
Random rand = new Random();
while (randomNumbers.size() < 6) {
randomNumbers.add(rand.nextInt(50) + 1);
}
或者,您可以生成数字 1-50,将它们打乱,然后选择任意六个元素:
List<Integer> numbers = new ArrayList<>(50); // known capacity
for (int i = 1; i <= 50; ++i) { numbers.add(i); }
Collections.shuffle(numbers);
List<Integer> sixRandomNumbers = numbers.subList(0, 6);
第一个解决方案在发生碰撞时会做额外的工作;所需的数量与总数的比率越大,这项额外的工作就会增加。第二个需要处理所有 50 个数字,因此需要做额外的工作;所需的数量与总数的比率越大,额外的工作就越少。这是一个有趣的问题,交叉点在哪里。
编辑(回应对原始问题的编辑)使用上述方法之一生成六个不同的随机数后,您需要将它们放入您要使用的变量中。一种方法(比如使用第一种方法)如下:
int[] numbers = new int[6];
Set<Integer> randomNumbers = new HashSet<>();
Random rand = new Random();
while (randomNumbers.size() < 6) {
randomNumbers.add(rand.nextInt(50) + 1);
}
System.out.println("Six random numbers: " + randomNumbers.toString());
// if you need them as an `int` array:
int i = 0;
for (Integer n : randomNumbers) {
numbers[i++] = n;
}
numbers
数组替换您的变量 number1
, ..., number6
.
关于java - 为什么这不会创建多组随机数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17533233/