Java でランダム ユーティリティを使用すると、1271、34556、177 などの数字が得られます。数字が繰り返されないようにする最も簡単な方法は何ですか?
質問する
5368 次
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 に答える