C#使用文本文件输出最大最小平均数组?

时间:2016-06-17 07:06:00

标签: c#

我之前做了一个练习,我必须编写一个程序,用户可以输入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

我理解这个问题,我只是不知道如何解决它!

3 个答案:

答案 0 :(得分:3)

如果您想从文件中读取数字,为什么要使用此代码?

for (int index = 0; index < hoursArray.Length; index++)
{
    Console.Write("Enter your hours: ");
    hoursArray[index] = int.Parse(Console.ReadLine());
}

您可以做的是阅读文件中的数字,将其存储在ArrayList中,然后使用Linq获取MaxMinAverage

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();

你只需要把它们放在你的主要部分就可以了 enter image description here

答案 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();