我正在尝试编写一个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();