-4

暗算クイズゲームの乱数を生成しようとしています。しかし、私は何か間違ったことをしていると思います。私のコードを修正するのを手伝ってください。私のコードが間違っている理由について、何らかの説明を含めてみてください。前もって感謝します!

 using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;


    namespace MindTraining
    {
        class Program
        {
            static void Main(string[] args)
            {

                Console.WriteLine("Enter the digits of first number ");
                int a=int.Parse(Console.ReadLine());
                Console.WriteLine("Enter the digits of second number");
                int b = int.Parse(Console.ReadLine());

                Random RandomClass = new Random(DateTime.UtcNow.Second);

                int RandomNumber = RandomClass.Next(10^(a-1), 10^a);
                Console.WriteLine(RandomNumber);
    }


    }

}

私が達成しようとしているのは、ユーザーに数字aに桁数と数字bに桁数を入力してほしいということです。

次に、プログラムは乱数を生成します。たとえば、ユーザーが2を入力した場合、プログラムは0〜10の数値を生成する必要があります(乱数、毎回異なる)

ユーザーがaに3を入力した場合、10から100の間、

bについても同様で、product.Numberは、プログラムの実行時に2回を超えて繰り返さないようにする必要があります。

OK、コードを次のように変更しました

    using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;


namespace MindTraining
{
    class Program
    {
        static void Main(string[] args)
        {

            Console.WriteLine("Enter the digits of first number ");
            int a=int.Parse(Console.ReadLine());
            Console.WriteLine("Enter the digits of second number");
            int b = int.Parse(Console.ReadLine());

            Random RandomClass = new Random(DateTime.UtcNow.Second);
            double num1=Math.Pow(10,a-1);
            double num2=Math.Pow(a,1);
            int num3 = Convert.ToInt32( num1);
            int num4=Convert.ToInt32(num2);

            int RandomNumber = RandomClass.Next(num3,num4);
            Console.WriteLine(RandomNumber);
}}

//それでも結果が得られないので、エラーをスローします、

これはうまくいきました!

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;


namespace MindTraining
{
    class Program
    {
        static void Main(string[] args)
        {

            Console.WriteLine("Enter the digits of first number ");
            int a=int.Parse(Console.ReadLine());
            Console.WriteLine("Enter the digits of second number");
            int b = int.Parse(Console.ReadLine());

            Random RandomClass = new Random();
            double num1=Math.Pow(10,(a-1));
            double num2=Math.Pow(10,(a));
            int num3 = Convert.ToInt32( num1);
            int num4=Convert.ToInt32(num2);

            int RandomNumber = RandomClass.Next(num3,num4);
            Console.WriteLine(RandomNumber);
}


}






        }
4

4 に答える 4

1

C#の^演算子は、べき乗ではなく、「排他的論理和」(XOR)を意味します。ここでそれについて読んでください:http://www.dotnetperls.com/xorMath.Pow代わりに試してください。

于 2011-11-12T02:59:02.417 に答える
1

^は、c#の電力演算子の昇給ではありません。これにはMath.Powを使用します。

于 2011-11-12T03:00:24.040 に答える
0

真に乱数を生成している間、その数が常に異なるとは考えられません。あなたがポイントを得たことを願っています。したがって、番号が毎回異なることをさらに確認する必要があります。

于 2011-11-12T03:28:49.790 に答える
0

非常に制限されたシード値を使用する理由はありますか?使ってみませんか

Random RandomClass = new Random();

オブジェクトのデフォルトの時間ベースのシード値はどれですか?

また、Math.pow(base、exp)を使用して、Random.next()呼び出しの範囲を次のように計算します。

int RandomNumber = RandomClass.Next((int)Math.Pow(10,(a-1)), (int)Math.Pow(10,a));

コードでは、次の理由でエラーが発生します。

double num2=Math.Pow(a,1);

自分自身を返します。したがって、Random.next()の最大値は最小値よりも低く、論理的に正しくありません。これは、コードの実行から得たエラーです。これは、最後に閉じ中括弧がないという事実は別としてです。

また、完全に乱数を生成するようなものは存在しないことを理解する必要があります。これらはすべて疑似ランダムジェネレータです。それらは、数直線上の数の正規分布に従います。したがって、生成されたすべての数値を保存してそれらをチェックし続けない限り、1回の実行で2回を超えて数値が生成されないと言うことは現実的ではありません。これは最後の手段であり、悲惨な要件の場合のみです。

于 2011-11-12T03:12:30.663 に答える