java随机数必须不同

java随机数必须不同,java,Java,我正在创建一个提取3个随机数的小程序,唯一的条件是这三个数必须彼此不同,例如:3,9,3是不可接受的 这是我的代码,我试了好几次,偶尔出现数字相等的情况 我的代码有什么问题 public class Premi { public static void main(String[] args) { int num = (int) (Math.random() *10) + 1; int num2 = (int) (Math.random() *10) + 1; int nu

我正在创建一个提取3个随机数的小程序,唯一的条件是这三个数必须彼此不同,例如:3,9,3是不可接受的

这是我的代码,我试了好几次,偶尔出现数字相等的情况

我的代码有什么问题

public class Premi {
public static void main(String[] args) {
    int num = (int) (Math.random() *10) + 1;
    int num2 = (int) (Math.random() *10) + 1;
    int num3 = (int) (Math.random() *10) + 1;
    boolean first = true;
    boolean second = true;
    boolean third = true;
    while(first) {
        if (num!=num2) {
            first=false;
        } else if (num==num2) {
            num = (int) (Math.random() *10) + 1;
        }   
    }
    while(second) {
        if (num!=num3) {
            second=false;
        } else if (num==num3) {
            num = (int) (Math.random() *10) + 1;
        }   
    }
    while(third) {
        if (num2!=num3) {
            third=false;
        } else if (num2==num3) {
            num2 = (int) (Math.random() *10) + 1;
        }   
    }
    System.out.println(num + "," + num2 + "," + num3);
}
}
多谢各位

Set<Integer> numbers = new HashSet<>();
while (numbers.size() < 3)
    numbers.add(((int) (Math.random() *10) + 1));

do
循环保证至少运行一次。

您应该进行一些调试。创建一个列表。当此列表的长度为
<3
时,生成一个随机整数。如果它在列表中,请继续迭代。如果不是,请将其添加到列表中。为什么所有的检查都是这样的?我已经做了,但是我找不到它如果你在最后一个while循环中更改
num2
,你可能会使它匹配
num
,而你不检查这个try SecureRandom这可能会减少冲突的数量,但我不能使用这个代码,因为,我是第一次学习java,我在我的书的第5章,直到现在,书中还解释了循环和if-else迭代,所以你根本不允许使用
集合
s?关于数组呢?不,只有循环或者如果需要的话。OK,编辑我的答案来解释你们课程的怪癖……使用集合生成唯一的数字是低效的。生成唯一数字的首选方法是Fisher-Yates算法。
int n1 = (int) (Math.random() * 10) + 1;
int n2;
do {
    n2 = (int) (Math.random() * 10) + 1;
} while (n2 == n1);
int n3;
do {
    n3 = (int) (Math.random() * 10) + 1;
} while (n3 == n2 || n3 == n1);