我是C#编程的新手,我遇到从输入读取文件生成随机数的问题。我试图从以下从文本文件中读取的输入
中的每一行的第二个字段生成随机数4321,99
5432,79
6543,59
7654,39
该文件由以下代码读取,然后解析为单独的字段,其中调用方法以生成随机数
private void readFileButton_Click(object sender, EventArgs e)
{
string readString;
inputFile = File.OpenText(sourceFileString);
while (!inputFile.EndOfStream)
{
readString = inputFile.ReadLine();
var flds = readString.Split(',');
string patID = flds[0];
int months = Convert.ToInt32(flds[1]);
Random();
}
inputFile.Close();
}
我正在使用的方法从第二个字段生成一个随机数
private void Random()
{
Random rand2Integer = new Random();
randomInteger = rand2Integer.Next(1, months) + 1;
}
然而,抛出此异常:'minValue'不能大于maxValue,我无法绕过它。如果我使用文本框在表单上手动输入数据,则会按预期生成随机数。是否有任何意见可以指导我?
答案 0 :(得分:7)
从您的代码中看起来您有一个类变量个月。但是,在读取文件时,您已声明了一个基本上隐藏类变量的局部变量。
现在使用Random函数时,使用了类变量(必须有0并导致此错误)
替换以下代码行
int months = Convert.ToInt32(flds[1]);
与
months = Convert.ToInt32(flds[1]);
答案 1 :(得分:3)
months
中的变量Random()
与您在int months = Convert.ToInt32(flds[1]);
中分配的变量{}不同,该变量是方法的本地变量。
您应在外部定义month
或将其作为参数传递给Random()
修改强> 我做了一些小改动,使代码更容易阅读。希望它有所帮助。
private void readFileButton_Click(object sender, EventArgs e)
{
// If you use the stream this way it will be disposed automatically.
using (var sr = new StreamReader(sourceFileString))
{
while (!sr.EndOfStream)
{
string readString = sr.ReadLine();
var flds = readString.Split(',');
string patID = flds[0];
int months = int.Parse(flds[1]);
//I prefer parameters more than fields to communicate between methods.
Random(months);
}
}
}
Random randomGenerator = new Random();
private void Random(int months)
{
randomInteger = randomGenerator.Next(1, months) + 1;
}
答案 2 :(得分:1)
在readFile
函数中,声明一个名为months
的变量,并将其初始化为文件中的数字。这似乎是正确的,可能效果很好。
但是,该变量具有功能范围。你可能有另一个名为" months"在类级别(否则您将收到编译时错误)。这个变量,而不是" readFile"中设置的变量,是"随机"方法。将行更改为:
months = Convert.ToInt32(flds[1]);
它会起作用。
另外,每次需要平局时,都不应使用Random
的新实例。每个对象有一个实例并在每次需要新的随机数时重复使用它被认为是更好的做法。