2012-04-25 54 views
1

我试图为数学问题生成随机数。程序编译时,错误的操作符“+”不能应用于'System.Random'和'System.Random'类型的操作数。我真的不知道如何解决这个错误。编译我的程序时出现此错误。运算符“+”不能应用于“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++; 
       } 
      } 

      } 
     } 

}

+2

除了回答您的实际问题(其错误消息已经告诉你挺清楚),'Console.Read'不会做你认为它的作用:http://msdn.microsoft.com/en -us /库/ system.console.read.aspx。你可能想要:'int answer = Int32.Parse(Console.ReadLine())'。 – 2012-04-25 18:13:39

回答

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的构造函数。请注意,每次运行程序时,结果都将保持不变。

+0

您还可以通过使用带有参数的“Next”重载来限制随机数的大小。 – 2012-04-25 18:27:08

2

您尝试添加两个随机发生器不是随机数,使用:

Random randomGenerator = new Random(0); 

var num1 = randomGenerator.Next(); 
var num2 = randomGenerator.Next(); 
5

您粘贴的代码段存在不少问题。我建议(如果你还没有)投资一个体面的开始C#书。实际上,生成随机数字是您在这些书中找到的最受欢迎的“示例程序”之一。但是,让你开始,这里的一些关键点:

  1. 当您粘贴示例代码,这样的网站,确保它是一个short, self-contained, correct example。即使我们修复了代码中的编译器错误,但还有其他一些问题,包括不平衡和/或缺失大括号。开始简单并构建示例,直到出现错误,然后粘贴该代码。请注意,有75%的时间可以帮助您自己修复错误。例如,如果您删除了未编译的代码行,并且只运行了第一部分,则会打印出"What is System.Random - System.Random?",这应该会给您一个非常清晰的想法,即您的num1num2不是您认为的那样。

  2. 由于这里的答案的其余部分已经指出,您对C#Random类的工作原理有一个根本性的误解。 (不要觉得不好,计算机生成的“随机数字”对任何人都没有意义,除非有人向你解释它们。)这些答案中提供的解决方案是正确的:Random是一个随机数生成器,您需要致电您的实例上的Next函数之一以从中获取整数。另外,除非实际上想要多次生成相同的随机序列,否则通常不需要Random的多个实例。 MSDN文章有一个非常彻底的例子。

  3. 虽然本身不​​是“错误”,但对于控制台输出来说效率并不高。控制台的读写功能完全在string对象上运行,并且它们具有内置的composite formatting功能。例如,代码的前几行可以改写为:

    var random = new Random(); 
    var x = random.Next(); 
    var y = random.Next(); 
    
    Console.Write("What is {0} + {1}? ", x, y); 
    
  4. 正如我在我的评论中提到,Console.Read()不完整的用户输入正确读取功能;它一次返回一个单一的UTF-16字符数据。例如,如果用户在150中键入,您将按照该顺序得到49,53和48。由于您大概希望允许用户一次输入多个数字,因此应该调用Console.ReadLine(),它会返回整个字符串,然后使用Int32.Parse()或某些类似函数将其转换为整数。

相关问题