0

C#でVisualStudioProfessionalを使用してWindowsフォームアプリケーションを作成しました。私のプログラムでは、ユーザーに必要なロール数を入力するように促し、Enterキーを押して番号を取得します。

番号はラベルの下に同じ形式で表示され、集計されます。知っている数字を集計する方法は知っていますが、ユーザーが入力したロールの数を生成する乱数ジェネレーターを取得できません。

これは私がしていることです:

Random randGen = new Random;
int oneRoll = randGen.Next(1,7) + randGen(1, 7);

同じプログラムをユーザーが望む回数だけ発生させたい。ループを試しましたが、for欲しいものが得られませんでした。

4

4 に答える 4

1
int rolls = Console.ReadLine();
int total = 0; 
Random randGen = new Random(System.DateTime.Now.Millisecond);
for(int i =0; i<rolls; i++)
{
int oneRoll = randGen.Next(1,7) + randGen.Next(1, 7);
Console.WriteLine("Rolled " + oneRoll);
total += oneRoll;
}

Console.WriteLine("Total " + total);

注意。ミリ秒ビットは必要ありません。シードはそれをよりランダムにします

于 2011-07-28T22:36:45.420 に答える
1

乱数ジェネレーターは一度だけ作成してください。

各ループ反復で作成しないでください。

または、ループが非常にタイトで、内部ジェネレーターのシードと同じ時間を使用するため、数値がランダムではない可能性があります。

于 2011-07-28T22:37:29.017 に答える
1

次のようなことを試してください:

Random randGen = new Random();
var rolls = new List<int>();
int sum = 0;
for (int i = 0; i < numberOfRolls; i++)
{
    int randomNum1 = randGen.Next(1,7);
    int randomNum2 = randGen.Next(1,7);
    sum += randomNum1 + randomNum2;
    rolls.Add(randomNum1);
    rolls.Add(randomNum2);
}

これで、すべての個別のロールがロールになり、それらの合計がすでに計算されています。

2 つのサイコロを振って、個別に記録し、合計するように編集しました。

于 2011-07-28T22:36:29.980 に答える
0

あなたのコードは完全に間違っています...

Random randGen = new Random(DateTime.Now.Ticks); // unique seed, mostly
int result = 0;
for (int i = 0; i < number_of_rolls_the_user_wants; i++)
    result += randGen.Next(2, 14); // (1 - 7) + (1 - 7) = 2 - 14 lol... >.>

number_of_rolls_the_user_wantsユーザーが希望するロール数に 置き換えます。result結果を保持します。

また、短時間に多数の乱数を生成する場合は、同じRandomオブジェクトを使用することに注意してください。

于 2011-07-28T22:37:54.960 に答える