从文件输入生成的随机数
本文关键字:随机数 文件 输入 | 更新日期: 2023-09-27 17:53:05
我是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,我无法理解它。如果我使用文本框在表单上手动输入数据,则会按预期生成随机数。有什么建议可以指导我吗?
从您的代码中,看起来您有一个类变量months。但是,在读取文件时,声明了一个局部变量,它实际上隐藏了类变量。
现在当您使用随机函数时,使用类变量(必须为0并导致此错误)
替换下面的代码行
int months = Convert.ToInt32(flds[1]);
months = Convert.ToInt32(flds[1]);
Random()
中的变量months
与您在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;
}
在readFile
函数中,声明了一个名为months
的变量,并将其初始化为文件中的数字。这看起来是正确的,可能工作得很好。
months = Convert.ToInt32(flds[1]);
,它会工作。
作为题外话,您不应该每次需要绘制时都使用Random
的新实例。更好的做法是为每个对象设置一个实例,并在每次需要新的随机数时重用它。