好的,所以目标是每行/每行生成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");
}
}
Run Code Online (Sandbox Code Playgroud)
}
编辑非常感谢大家,我终于到了那里,结果我把数组放在错误的地方(它在for循环之外所以只做了1组随机数)现在修复了它.下一个挑战; 有一个比较程序来扫描90多组6个唯一数字,并比较它们是否匹配不同的集合(每行/集>.<)
您可以将随机整数填充到a中,Set<Integer>直到它有六个元素:
Set<Integer> randomNumbers = new HashSet<>();
Random rand = new Random();
while (randomNumbers.size() < 6) {
randomNumbers.add(rand.nextInt(50) + 1);
}
Run Code Online (Sandbox Code Playgroud)
或者,您可以生成数字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);
Run Code Online (Sandbox Code Playgroud)
每当发生碰撞时,第一种解决方案都会做额外的工作; 这个额外的工作量越大,所需的比例就越大.第二个是通过处理所有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;
}
Run Code Online (Sandbox Code Playgroud)
该numbers阵列取代了你的变量number1,...... number6.