-2

繰り返しのないランダムな 4 桁の数字を返すメソッドを作成するのに助けが必要です。文字列の使用は一切許可されていません...

これは私がこれまでに持っているものであり、実行された行です。エラーが発生しました:実行できませんでした

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

5 に答える 5

2

この線:

int x = + ran.nextInt(1000);

読むべき

int x = r.nextInt(1000);

別のこと-繰り返しのないランダムな4桁の数字を生成したいと言っています。コインを投げると 4 回連続で表が出るのと同じように、乱数ジェネレーターが同じ数を複数回返してもまったく問題ないため、これには時間がかかる場合があります。

于 2013-03-26T23:28:00.367 に答える
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 に答える
1

0 から 9 までの 4 つの乱数を生成します (引数nextInt: 10)。4桁すべてを追跡します。それらのいずれかが同じ場合、別の乱数を生成します。次に、数字を使用して最終的な数字を作成します。

Randomさらに、変数を宣言する場合は、 notrを使用します。r.nextInt(10)ran.nextInt(10)

于 2013-03-26T23:29:57.937 に答える
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 に答える
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 に答える