编译程序时出现此错误.运算符"+"不能应用于"System.Random"和"System.Random"的操作数

Qui*_*ott 1 c# mono operators monodevelop xamarin.android

我试图为数学问题生成随机数.编译程序时,错误操作符"+"不能应用于"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++;
                }
            }

            }
        }
Run Code Online (Sandbox Code Playgroud)

现在我能够编译程序没有任何错误,但它没有生成任何数字.有谁看到我可能有什么错误.

               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++;
                }
            }

            }
        }
Run Code Online (Sandbox Code Playgroud)

}

das*_*ght 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();       
Run Code Online (Sandbox Code Playgroud)

每次打电话给gen.Next()你都会得到一个新的随机数.如果您希望随机数序列可重复,请将数字(任意数字)传递给.的构造函数Random.请注意,每次运行程序时,结果都将保持不变.


Mic*_*eld 5

您粘贴的代码段存在相当多的问题.我建议(如果你还没有)投资一个不错的开始C#书.事实上,生成随机数是您在这类书中找到的最受欢迎的"示例程序"之一.但是,为了帮助您入门,这里有一些关键点:

  1. 将示例代码粘贴到这样的网站时,请确保它是一个简短,自包含,正确的示例.即使我们在您的代码中修复了编译器错误,它还有其他几个问题,包括不平衡和/或缺少大括号.从简单开始并构建示例,直到出现错误,然后粘贴该代码.请注意,75%的时间可以帮助您自己修复错误.例如,如果您删除了未编译的代码行,并且只运行了第一部分,那么它将打印出来"What is System.Random - System.Random?",这应该让您清楚地了解您的num1并且num2不是您认为的那样.

  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);
    
    Run Code Online (Sandbox Code Playgroud)
  4. 正如我在评论中提到的,Console.Read()读取完整的用户输入不是正确的功能; 它一次返回一个UTF-16字符的数据.例如,如果输入的用户150将按此顺序获得49,53和48.由于您可能希望允许用户一次输入多个数字,因此您应该调用Console.ReadLine(),返回整个字符串,然后使用Int32.Parse()或某些类似函数将其转换为整数.