生成随机数方法



我需要帮助编写一个方法,将返回一个随机的4位数没有重复。我不允许以任何方式使用字符串…

这是我到目前为止所拥有的和运行的行。,我得到一个错误:运行不能解决

public static int generateSecretNumber() {
    Random r = new Random();
    int x = r.nextInt(1000);;    
    x = x + 1000;  
    return x;

一行:

int x = + ran.nextInt(1000);

应该读

int x = r.nextInt(1000);

另一件事-你说你想要生成一个没有重复的随机4位数。这可能需要一段时间,因为随机数生成器可以多次返回相同的数字,就像当你投掷硬币时,你可以连续得到4个正面一样。

可以生成4个独立的数

1)生成1到9之间的数字A

2)生成0 ~ 9之间且不同于A的数字B

3)生成0 ~ 9之间且不同于A和B的数字C

4)生成0 ~ 9之间不同于A、B、C的数字D

现在你的号码是ABCD或

1000*A + 100*B + 10*C + D

完整代码:

public static int generateSecretNumber() {
    Random ran = new Random();
    int a, b, c, d;
    a = ran.nextInt(9) + 1; //1-9
    do {
        b = ran.nextInt(10); //0-9
    } while(b==a);
    do {
        c = ran.nextInt(10); //0-9
    } while(c==a || c==b);
    do {
        d = ran.nextInt(10); //0-9
    } while(d==c || d==b || d==a);
    return 1000*a + 100*b + 10*c + d;
}

生成0到9之间的4个随机数字(对nextInt: 10的参数)。跟踪所有4个数字。如果它们中的任何一个是相同的,则生成另一个随机数字。然后用这些数字构造你的最终数字。

另外,如果你打算声明你的Random变量r,那么使用r.nextInt(10)而不是ran.nextInt(10)

对于具有不同数字的4位数随机数,您可以对集合进行洗牌。

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 0);
do{
    Collections.shuffle(numbers);
} while (0 == numbers.get(0));
System.out.println(numbers.subList(0, 4));

有很多不同的方法可以得到不同的数字。我的建议如下:

public static int generateSecretNumber(int digitLength) {
    Random ran = new Random();
    int randDigit[digitLength];
    int finalNum = 0;
    for(int i = 0; i < digitLength; i++){
        randDigit[i] = ran.nextInt(10);
        int j = 0;
        while(j < i){
            if(randDigit[j] == randDigit[i]){
                randDigit[i] = ran.nextInt(10);
                j = 0;
                continue;
            }
            j++;
        }
    }
    for(int i = 0; i < digitLength; i++){
        finalNum = finalNum + (randDigit[i] * Math.pow(10, i));
    }
    return finalNum;
}

最新更新