1

数学の問題で乱数を生成しようとしています。プログラムがコンパイルされると、「System.Random」型および「System.Random」型のオペランドに演算子 " + " を適用できませんというエラーが発生します。このエラーを修正する方法が本当にわかりません。

            Random num1 = new Random(0);                
            Random num2 =new Random(0); 
            int rand; 


            Console.Write("What is");
            Console.Write(num1);
            Console.Write( " - ");
            Console.Write( num2);
            Console.Write( "?");
            int answer = Console.Read();

                    if (num1 + num2 == answer) ERROR {
                    Console.Write(" Your are Correct!\n");
                    correctCount++;

                }
                    else
                    Console.Write( "Your answer is wrong" );
                    Console.Write(num1);
                    Console.Write(" + ");
                    Console.Write(num2);
                    Console.Write("should be ");
                    Console.Write(num1 + num2); ERROR
                    count++;
                }
            }

            }
        }

エラーなしでプログラムをコンパイルできるようになりましたが、数値が生成されません。誰かが私が間違っているかもしれないことを見ていますか?

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

               using Android.App;
               using Android.Content;
               using Android.OS;
               using Android.Runtime;
               using Android.Views;
               using Android.Widget;
             namespace Jagtutor
             {

[Activity(Label = "Addition")]
public class AdditionsActivity : Activity
{
    protected override void OnCreate(Bundle bundle)
    {
        base.OnCreate(bundle);
        // Create your application here
        SetContentView(Resource.Layout.Second);

        var label = FindViewById<TextView>(Resource.Id.screen3Label);
        label.Text = Intent.GetStringExtra("ModuleData") ?? "Data not available";

        {
        int correctCount = 0;
        int count = 0;

             while (count < 10);
            {
                Random gen = new Random();
                int num1 = gen.Next();
                int num2 = gen.Next(); 


            Console.Write("What is");
            Console.Write(num1);
            Console.Write( " - ");
            Console.Write( num2);
            Console.Write( "?");
            int answer = Int32.Parse(Console.ReadLine());

                    if (num1 + num2 == answer) {
                    Console.Write(" Your are Correct!\n");
                    correctCount++;

                }
                    else
                    Console.Write( "Your answer is wrong" );
                    Console.Write(num1);
                    Console.Write(" + ");
                    Console.Write(num2);
                    Console.Write("should be ");
                    Console.Write(num1 + num2);
                    count++;
                }
            }

            }
        }

}

4

4 に答える 4

7

使用方法を誤解していますRandom: それは数値ではなく、乱数を生成するために使用できるクラスです。

これを試して:

// Make a generator
Random gen = new Random();
// Now we can use our generator to make new random numbers like this:
int num1 = gen.Next();       
int num2 = gen.Next();       

電話をかけるたびgen.Next()に、新しい乱数を取得します。乱数のシーケンスを繰り返し可能にしたい場合は、数値 (任意の数値) を のコンストラクターに渡しRandomます。プログラムを実行するたびに結果が同じになることに注意してください。

于 2012-04-25T18:07:58.100 に答える
5

貼り付けたコード スニペットにはかなりの問題があります。まともな C# の入門書に投資することをお勧めします (まだ行っていない場合)。実際、乱数の生成は、この種の本で見られる最も人気のある「サンプル プログラム」の 1 つです。ただし、開始するために、いくつかの重要なポイントを次に示します。

  1. このようなサイトにサンプル コードを貼り付ける場合は、それが短く自己完結型の正しいであることを確認してください。コードのコンパイラ エラーを修正したとしても、バランスの取れていない、中かっこの欠落など、他にもいくつかの問題があります。簡単に始めて、エラーが発生するまでサンプルをビルドしてから、そのコードを貼り付けます。75% の確率で、これは自分でエラーを修正するのに役立つことに注意してください。たとえば、コンパイルされなかったコード行を削除して、最初の部分だけを実行すると、 が出力されます。これにより、 とが思っていたものではないことが"What is System.Random - System.Random?"明確にわかります。num1num2

  2. ここでの残りの回答が指摘しているように、C#Randomクラスのしくみについて根本的な誤解があります。(気を悪くしないでください。コンピューターで生成された「乱数」は、誰かが説明してくれるまで意味がありません。) これらの回答で提供されている解決策は正しいです:Randomは乱数ジェネレーターであり、いずれかを呼び出す必要があります。Nextインスタンスの関数を使用して、インスタンスから整数を取得します。また、Random実際に同じランダム シーケンスを複数回生成したい場合を除き、通常は の複数のインスタンスは必要ありません。MSDN の記事には、非常に詳細な例があります。

  3. それ自体は「間違っている」わけではありませんが、コンソール出力を効率的に処理できていません。コンソールの読み取りおよび書き込み機能は完全にstringオブジェクト上で動作し、複合フォーマット機能が組み込まれています。たとえば、コードの最初の数行は次のように書き直すことができます。

    var random = new Random();
    var x = random.Next();
    var y = random.Next();
    
    Console.Write("What is {0} + {1}? ", x, y);
    
  4. コメントで述べたように、Console.Read()完全なユーザー入力を読み取るための正しい関数ではありません。一度に 1 つの UTF-16 文字のデータを返します。たとえば、ユーザーが入力した場合、49、53、48 が150この順序で表示されます。おそらくユーザーが一度に複数の数字を入力できるようにしたいので、代わりに を呼び出して文字列全体を返し、または同様の関数Console.ReadLine()を使用して整数に変換する必要があります。Int32.Parse()

于 2012-04-25T18:41:58.467 に答える
2

乱数ではなく、2 つのランダム ジェネレーターを追加しようとしています。これを使用します。

Random randomGenerator = new Random(0);

var num1 = randomGenerator.Next();
var num2 = randomGenerator.Next();
于 2012-04-25T18:08:06.753 に答える
1

実際の乱数を取得するには、Random.Next() http://msdn.microsoft.com/en-us/library/9b3ta19y.aspxのオーバーロードの 1 つを呼び出す必要があります。

于 2012-04-25T18:08:55.603 に答える