C#项目.试图在.txt文件中找到平均数、最小数、最大数和数字个数



我正在尝试编写一个C#控制台应用程序,该应用程序将从数字文本文件中获取输入。从这些数字中,我需要找到数字的数量,数字中最大的,数字中最小的和数字的平均值。

int NumberCounter = 0;
string NumberLines;
//Code to Read the file and display Each Line seperately.  
System.IO.StreamReader NumbersFile = new System.IO.StreamReader(@"c:Numbers.txt");
while ((NumberLines = NumbersFile.ReadLine()) != null)
{
System.Console.WriteLine(NumberLines);
NumberCounter++;
}
NumbersFile.Close();
System.Console.WriteLine("There Are {0} lines.", NumberCounter);
Console.ReadLine();

正如你所看到的,我现在只算出了数字。尝试使用任何类型的等式将Streamreader与其他任何东西进行比较都会导致类型不匹配错误。我是这里的初学者,所以我有点迷路了。

提前谢谢。

您可以将所有值读取到列表中,然后对它们进行迭代以计算各种值,或者您可以执行以下操作,轻松处理超大文件:

string NumberLines;
var largest = int.MinValue;
var smallest = int.MaxValue;
var count = 0;
var total = 0;
using(var NumbersFile = new System.IO.StreamReader(@"c:Numbers.txt"))
{
while ((NumberLines = NumbersFile.ReadLine()) != null)
{
var value = int.Parse(NumberLines);
count++;
largest = Math.Max(largest,value);
smallest = Math.Min(smallest,value);
total += value;
}
}
var average = total/count;

如果你没有绑定到StreamReader,那么我会使用以下内容:

var largest = int.MinValue;
var smallest = int.MaxValue;
var count = 0;
var total = 0;
foreach(var line in File.ReadLines(@"c:Numbers.txt"))
{
var value = int.Parse(line);
count++;
largest = Math.Max(largest,value);
smallest = Math.Min(smallest,value);
total += value;
}
var average = total/count;

您可以这样做:

var text = File.ReadAllLines(@"c:Numbers.txt");
var numbers = text.Where(l=>int.TryParse(l, out int _)).Select(l => int.Parse(l)).ToList();
var max = numbers.Max();
var min = numbers.Min();
var average = numbers.Average();
var total = numbers.Count();

查看返回IEnumerable<string>File.ReadLines

IEnumerable可以与LINQ一起使用,LINQ有方便的聚合方法:

IEnumerable<string> numberStrings = File.ReadLines(@"c:Numbers.txt");
IEnumerable<double> numbers = numberStrings.Select(s => double.Parse(s));
double smallest = numbers.Min();
double largest = numbers.Max();
double average = numbers.Average();

您可以使用File。ReadAllLines和Int32.Parse,然后使用Linq计算Min、Max、Count和Average。

例如,

var lines = File.ReadAllLines(filePath);    
var numbers = lines.Select(x=>Int32.Parse(x)); // Or Double.Parse or... Depending on expected numeric type
var min = numbers.Min();
var max = numbers.Max();
var average = numbers.Average();
var count = numbers.Count();

您应该在while循环之前声明一个List<int>,以保存您在文件中找到的数字。

List<int> numbersInFile = new List<int>();

然后,您需要解析每一行的内容,以检查它是否被格式化为有效的数字,在这种情况下,您需要将它添加到前面提到的列表中。

if (int.TryParse(NumberLines, out int number))
{
numbersInFile.Add(number);
}

最后,List<>结构已经实现了方便的方法,如.Average().Min().Max(),它们将返回您所查找的值。

int max = numbersInFile.Max();

如果您需要List、Stack、Queue、massive和m,我会使用massive。因此,获取Number,获取Number的数字(在循环中,当数字不是0时:它获取数字mod 10,将数字除以10(,将Number写入massive,通过相同的命名函数获取Max、Average、Min和Count of massive。(((这是我的代码:

int NumberCounter = 0;
int[] massive = new int[1000]
string NumberLines;
//Code to Read the file and display Each Line seperately.  
System.IO.StreamReader NumbersFile = new System.IO.StreamReader(@"c:Numbers.txt");
while ((NumberLines = NumbersFile.ReadLine()) != null)
{
System.Console.WriteLine(NumberLines);
int number = int.Parse(NumberLines);
int number1 = number;
while(number1!=0)
{
s = number1 %1 0;
number1 /= 10;
Console.WriteLine(s);
}
massive[NumberCounter]=number;
NumberCounter++;
}
NumbersFile.Close();
Console.WriteLine(massive.Average());
Console.WriteLine(massive.Max());
Console.WriteLine(massive.Min());

System.Console.WriteLine("There Are {0} lines.", NumberCounter);
Console.ReadLine();

最新更新