3

Java でランダム ユーティリティを使用すると、1271、34556、177 などの数字が得られます。数字が繰り返されないようにする最も簡単な方法は何ですか?

4

6 に答える 6

3

生成された乱数が要件を満たしているかどうかを確認するループを作成するのはどうですか。

final Random rnd = new Random();
int n;
do {
    n = rnd.nextInt(1000);
} while(containsRepeatingDigits(n));

containsRepeatingDigits次のようになります。

boolean containsRepeatingDigits(final int n) {
    final boolean digits[] = new boolean[10];
    for(char c : String.valueOf(n).toCharArray()) {
        final int i = c-'0';
        if(digits[i])
            return true;
        digits[i] = true;
    }
    return false;
}
于 2013-07-15T09:59:29.937 に答える
1

乱数に繰り返し数字があるかどうかを確認し、ある場合は新しい数字を生成できます。これは C# で書かれていますが、これを Java に簡単に変換できるはずです。

    private static Random rand = new Random();
    public static int GenerateNumberNonRepeat()
    {
        int number;
        do
        {
            number = rand.Next();
        } while (IsRepeating(number));

        return number;
    }

    public static bool IsRepeating(int number)
    {
        string textual = number.ToString();
        for (int i = 0; i < textual.Length; i++)
        {
            for (int j = i + 1; j < textual.Length; j++)
            {
                if (textual[i] == textual[j])
                    return true;
            }
        }

        return false;
    }
于 2013-07-15T09:55:35.100 に答える
0

このコードはあなたを助けるかもしれません

    Set set  = new HashSet<Integer>();
    Random rand= new Random();
    public int getNonRepeatingRandomNumber() {
        int intV = rand.nextInt();
        if(set.contains(intV)) {
            return getNonRepeatingRandomNumber();
        }
        else {
            set.add(intV);
            return intV;
        }
    }
于 2013-07-15T09:59:40.147 に答える