我在编译程序时收到此错误.运算符 “+” 不能应用于 “System.Random” 和 “System.Random”
本文关键字:System Random 不能 应用于 运算符 编译程序 错误 | 更新日期: 2023-09-27 18:32:10
我正在尝试为数学问题生成随机数。编译程序时,错误运算符"+"不能应用于类型为"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++;
}
}
}
}
}
你误解了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
的构造函数。请注意,每次运行程序时,结果将保持不变。
您粘贴的代码片段存在很多问题。我建议(如果你还没有的话)投资一本不错的C#入门书。事实上,生成随机数是这类书籍中最受欢迎的"示例程序"之一。但是,为了帮助您入门,这里有一些关键点:
-
将示例代码粘贴到此类网站时,请确保它是一个简短、独立、正确的示例。即使我们修复了代码中的编译器错误,它仍然存在其他几个问题,包括不平衡和/或缺少大括号。从简单开始并构建您的示例,直到收到错误,然后粘贴该代码。请注意,在75%的情况下,这将帮助您自己修复错误。例如,如果您删除了未编译的代码行,并且只运行了第一部分,它将打印出
"What is System.Random - System.Random?"
,这应该让您非常清楚地了解您的num1
和num2
不是您认为的那样。 -
正如此处的其他答案所指出的那样,您对 C#
Random
类的工作方式存在根本性的误解。(不要难过,计算机生成的"随机数"对任何人都没有意义,除非有人向你解释它们。这些答案中提供的解决方案是正确的:Random
是一个随机数生成器,您需要调用实例上的Next
函数之一才能从中获取整数。此外,您通常不需要多个Random
实例,除非您实际上希望多次生成相同的随机序列。MSDN 文章有一个非常详尽的示例。 -
虽然本身不是"错误",但控制台输出的效率并不高。 控制台的读取和写入功能完全对
string
对象进行操作,并且具有内置的复合格式设置功能。例如,可以将前几行代码重写为:var random = new Random(); var x = random.Next(); var y = random.Next(); Console.Write("What is {0} + {1}? ", x, y);
-
正如我在评论中提到的,
Console.Read()
不是完整用户输入中读取的正确函数;它一次返回一个 UTF-16 字符的数据。例如,如果用户键入150
则按该顺序获得 49、53 和 48。由于您可能希望允许用户一次键入多个数字,因此您应该改为调用Console.ReadLine()
,这将返回整个字符串,然后使用Int32.Parse()
或类似函数将其转换为整数。
您正在尝试添加两个随机生成器而不是随机数,请使用:
Random randomGenerator = new Random(0);
var num1 = randomGenerator.Next();
var num2 = randomGenerator.Next();
你需要调用 Random.Next() http://msdn.microsoft.com/en-us/library/9b3ta19y.aspx 的一个重载来获取实际的随机数。