我之前做了一个练习,我必须编写一个程序,用户可以输入30个不同的数字(小时),程序会吐出数组,平均值,分钟数和最大值。那很好。然而,现在,我的任务是从文本文件中读取数字(并输出与之前相同的数字 - 数组,平均值,最小值,最大值)。
我遇到了一个基于原始练习的错误,我被告知程序中不存在名称(我理解这是因为文本doc现在保留了以前的名称)。我不知道我需要做些什么才能改变这一点。
我观看了一些视频,发现此网站上列出的类似问题却被卡住了:(。有人可以帮忙吗?
程序代码是:
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
namespace IntsArray
{
class Program
{
static void Main(string[] args)
{
StreamReader myReader = new StreamReader("Values.txt");
string line = "";
while (line != null)
{
line = myReader.ReadLine();
if (line != null)
Console.WriteLine(line);
}
myReader.Close();
Console.ReadLine();
for (int index = 0; index < hoursArray.Length; index++)
{
Console.Write("Enter your hours: ");
hoursArray[index] = int.Parse(Console.ReadLine());
}
Console.WriteLine("Numbers in the list: " + hoursArray.Length);
for (int index = 0; index < hoursArray.Length; index++)
{
Console.WriteLine(hoursArray[index]);
}
Console.ReadKey();
int total = 0;
double average = 0;
for (int index = 0; index < hoursArray.Length; index++)
{
total = total + hoursArray[index];
}
average = (double)total / hoursArray.Length;
Console.WriteLine("Average = " + average.ToString("N2"));
int high = hoursArray[0];
for (int index = 1; index < hoursArray.Length; index++)
{
if (hoursArray[index] > high)
{
high = hoursArray[index];
}
}
Console.WriteLine("Highest number = " + high);
int low = hoursArray[0];
for (int index = 0; index < hoursArray.Length; index++)
{
if (hoursArray[index] < low)
{
low = hoursArray[index];
}
}
Console.WriteLine("Lowest number = " + low);
Console.ReadKey();
}
}
}
Values.txt中的数字如下所示:
8
24
9
7
6
12
10
11
23
1
2
9
8
8
9
7
9
15
6
1
7
6
12
10
11
23
1
2
9
8
我理解这个问题,我只是不知道如何解决它!
答案 0 :(得分:3)
如果您想从文件中读取数字,为什么要使用此代码?
for (int index = 0; index < hoursArray.Length; index++)
{
Console.Write("Enter your hours: ");
hoursArray[index] = int.Parse(Console.ReadLine());
}
您可以做的是阅读文件中的数字,将其存储在Array
或List
中,然后使用Linq
获取Max
,Min
和Average
。
List<int> Numbers = System.IO.File.ReadAllLines("Your File Path")
.Select(N=> Convert.ToInt32(N)).ToList();
Console.WriteLine(Numbers.Average());
Console.WriteLine(Numbers.Max());
Console.WriteLine(Numbers.Min());
答案 1 :(得分:0)
您需要定义数组
int[] hoursArray = new int[WHATEVER LENGTH IT SHOULD BE];
然后你的StreamReader读取行必须看起来像这样:
string line = "";
int position = 0; //needed to set the array position
while (line != null)
{
line = myReader.ReadLine();
if (line != null)
{
Console.WriteLine(line);
hoursArray[position] = int.Parse(line); //convert line to int and sotres it in the array
position++;
}
}
如果你想让它更灵活,我会使用列表而不是数组
修改强> min max avg calulation:
int max = 0;
int min = 9999999;
double avg = 0;
for (int i = 0; i < hoursArray.Length; i++)
{
if (hoursArray[i] > max) //if there is a higher value then the current max
max = hoursArray[i];
if (hoursArray[i] < min) //if there is a lower value then the current min
min = hoursArray[i];
avg = avg + hoursArray[i];
}
avg = avg / hoursArray.Length;
Console.WriteLine("Max: " + max);
Console.WriteLine("Min: " + min);
Console.WriteLine("Avg: " + avg);
Console.ReadLine();
答案 2 :(得分:0)
您要做的第一件事就是确定文本文件中的行数。
var file = new StreamReader("file.txt").ReadToEnd();
var lines = file.Split(new char[] {'\n'});
var count = lines.Count;
根据此计数初始化数组
int[] hoursArray = new int[count];
之后填充你的数组。
int index = 0;
while ((line = sr.ReadLine()) != null)
{
hoursArray[index++] = Convert.ToInt32(line);
}
然后最后一步,你现在可以应用linq来获得最大最小值和avg与arvin所说的相同。
var max = hoursArray.Max();
var min = hoursArray.Min();
var avg = hoursArray.Avg();