java随机数必须不同

时间:2017-12-15 13:49:31

标签: 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 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);
}
}

谢谢。

1 个答案:

答案 0 :(得分:1)

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

在此使用Set可确保数字不会重复。

如果您不允许使用任何馆藏或阵列(我保留我对禁止学生使用有效技术的课程的看法),您可以使用:

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);

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