为什么不创建多组随机数?

Neo*_*uro 0 java

好的,所以目标是每行/每行生成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个唯一数字,并比较它们是否匹配不同的集合(每行/集>.<)

Ted*_*opp 7

您可以将随机整数填充到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.