-2

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

这就是我到目前为止所拥有的以及运行的线路。涉及,我得到一个错误:运行无法解决

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

5 回答 5

2

您可以生成 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;
}
于 2013-03-26T23:25:17.200 回答
2

该行:

int x = + ran.nextInt(1000);

应该读

int x = r.nextInt(1000);

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

于 2013-03-26T23:28:00.367 回答
1

对于具有不同数字的 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));
于 2013-03-27T00:06:44.957 回答
1

生成 0 到 9 之间的 4 个随机数字(参数为nextInt:10)。跟踪所有 4 位数字。如果其中任何一个相同,则生成另一个随机数字。然后使用数字构造您的最终数字。

此外,如果您要声明Random变量r,请使用r.nextInt(10)not ran.nextInt(10)

于 2013-03-26T23:29:57.937 回答
0

有很多不同的方法可以做到这一点来获得不同的数字。我建议如下:

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;
}
于 2013-03-26T23:40:32.130 回答