4 桁の乱数を生成し、テキスト ボックスに何かのシリアル番号として入力したいと考えています。どうすればそれを行うことができますか?
8 に答える
重複しないようにしたい場合は、次を使用しますGuid
。
Guid guid = Guid.NewGuid(); // however a Guid is not a 4 digit integer
乱数が必要な場合は、次を使用しますRandom
。
Random rnd = new Random();
int randomInt = rnd.Next(1000, 10000)
ただし、ランダム インスタンスは現在の時刻でシードされるため、ループ内で作成しないでください。そうしないと、繰り返し値が得られます。したがって、ランダム インスタンスをパラメーターとしてこのメソッドに渡すか、フィールド/プロパティを使用するか、外部で作成されたループで同じインスタンスを使用します。
一意の乱数を取得する最も簡単な方法は、新しい数が存在する場合は作成することです。
List<int> used = new List<int>();
Random random = new Random();
foreach(thing you want to do)
{
int current = random.Next(1000, 9999);
while(used.Contains(current))
current = random.Next(1000, 9999);
//do something
used.Add(current);
}
またはあなたのニーズを満たすためにこれに似たバリエーション
Random クラスは、乱数を作成するために使用されます。(もちろん疑似ランダムです。)
例:
Random rnd = new Random();
int num = rnd.Next(1000, 10000); //creates number from 1000 to 9999
ストア生成番号に HashSet を使用し、重複をチェックできます
これを行う最も簡単な方法は、可能なすべての選択肢のリストを順番に生成し、シャッフルすることです。次に、リストをシャッフルした後、リストを「順番に」通過すると、シーケンスはランダムになり、繰り返されなくなります。
List<int> numbers = new List<int>(Enumerable<int>.Range(0,10000);
HelperFunctions.Shuffle(numbers); //There are plenty of examples of how to shuffle the list on this site.
foreach(var number in numbers)
{
Console.WriteLine(number.ToString("D4"); //Displays random numbers from 0000 to 9999 but never repeats
}
このような:
var random = new Random();
var numbers = new List<int>(0);
for (var i = 0; i < 4; i++)
{
var number = random.Next(1000, 10000);
if (numbers.Contains(number))
{
i--;
continue;
}
numbers.Add(number);
}
tbx1.Text = numbers[0].ToString();
tbx2.Text = numbers[1].ToString();
tbx3.Text = numbers[2].ToString();
tbx4.Text = numbers[3].ToString();
これにより、4 桁の乱数が得られます。
Random random= new Random();
int RnNum = random.Next(1000,9999);
重複しないようにしたい場合は、生成されたランダム値をセッションに保存し、既に生成されている場合は比較します。もちろん、他の方法もあります。セッションの方法でやりたくない場合は、テキスト ファイルなどに書き込みます。
Dictionary または Hashset で生成された数値を記録しておく必要があります。お気に入り
HashSet<int> generatedValues = new HashSet<int>();
Random rnd = new Random();
int randomInt = rnd.Next(1000,9999);
while(generatedValues.Contains(randomInt))
{
randomInt = rnd.Next(1000,9999);
}
generatedValues.Add(randomint);