如何计算「;平均;“价值”;最高的;价值,以及;“最低”;数组中的值?C#

如何计算「;平均;“价值”;最高的;价值,以及;“最低”;数组中的值?C#,c#,arrays,winforms,C#,Arrays,Winforms,第1部分:我将创建一个程序,该程序将文件内容读入数组,并在列表框控件中显示数组内容,计算并显示数组值的总和。-完成了那部分 第2部分:计算平均值、最高值和最低值,并在标签控件中显示它们 我对编码还不熟悉,所以我不能做太多,我求助于堆栈溢出 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System

第1部分:我将创建一个程序,该程序将文件内容读入数组,并在列表框控件中显示数组内容,计算并显示数组值的总和。-完成了那部分

第2部分:计算平均值、最高值和最低值,并在标签控件中显示它们

我对编码还不熟悉,所以我不能做太多,我求助于堆栈溢出

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;

namespace SalesAnalysis
{
public partial class SalesAnalysisApplication : Form
{
    public SalesAnalysisApplication()
    {
        InitializeComponent();
    }

    private void salesAnalysisButton_Click(object sender, EventArgs e)
    {
        //declaring array
        const int SIZE = 100;
        decimal[] sales = new decimal[SIZE];

        //varible to hold amount stored in array
        int count = 0;



        //declaring streamreader
        StreamReader inputFile;

        //opening the sales file
        inputFile = File.OpenText("Sales.txt");

        try
        {
            //pull contents from file into array while there is still 
             // items to pull and the array isnt full

            while (!inputFile.EndOfStream && count < sales.Length)
            {
                sales[count] = decimal.Parse(inputFile.ReadLine());
                count++;
            }
            //close the file
            inputFile.Close();

            //display contents in listbox
            for (int index = 0; index < count; index++)
            {
                salesListBox.Items.Add(sales[index]);
            }


            //Calculate the sum of all values
            for (int index = 0; index < sales.Length; index++)
            {
                totalSales += sales[index];
            }
            //display total of all values
            salesListBox.Items.Add("Total =" + totalSales);


            //Determine the average sales from the array
            for (int index = 0; index < sales.Length; index++)
            {
                //calculate the average
                averageSales = totalSales / 7;
            }


        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }

    private void Clear_Click(object sender, EventArgs e)
    {
        //Clear all fields
        salesListBox.Items.Clear();
        averageResultsLabel.Text = "";
        highestResultsLabel.Text = "";
        lowestResultsLabel.Text = "";
    }

    private void exitButton_Click(object sender, EventArgs e)
    {
        //close form
        this.Close();
    }
}
使用系统;
使用System.Collections.Generic;
使用系统组件模型;
使用系统数据;
使用系统图;
使用System.Linq;
使用系统文本;
使用System.Threading.Tasks;
使用System.Windows.Forms;
使用System.IO;
命名空间分析
{
公共部分类SalesAnalysisApplication:表单
{
公共销售分析应用程序()
{
初始化组件();
}
私有void salesAnalysisButton_单击(对象发送者,事件参数e)
{
//声明数组
常数int SIZE=100;
十进制[]销售额=新的十进制[大小];
//可变以保存数组中存储的数量
整数计数=0;
//声明流阅读器
StreamReader输入文件;
//打开销售文件
inputFile=File.OpenText(“Sales.txt”);
尝试
{
//在仍然存在的情况下,将文件中的内容拉入数组
//要提取的项目和阵列未满
而(!inputFile.EndOfStream&&count

}

您可以使用linq执行此操作,例如:

    var list=Enumerable.Range(0,1000);

    var average = list.Average();

    var highest = list.Max()

    var smallest= list.Min()

    var total= list.Sum()

请不要忘记使用System.Linq添加

首先将u r
十进制
数组转换为列表

List<decimal> lst = sales.OfType<decimal>().ToList(); // Convert to List.
非linq方法

您有一个
sales.Length
和一个
totalSales
。因此,您有一个
平均销售额

For
循环中时,输入最大值和最小值

for (int index = 0; index < sales.Length; index ++ 
  {
    if (sales
  }

如果您喜欢好的旧循环(并且没有Linq),您可以尝试
File.ReadLines
foreach

  decimal max = 0;
  decimal min = 0;
  decimal sum = 0;
  int count = 0;      

  foreach(string line in File.ReadLines("Sales.txt")) {
    decimal value = decimal.Parse(line);

    salesListBox.Items.Add(value);

    if (count == 0 || value > max)
      max = value;

    if (count == 0 || value < min)
      min = value;

    sum += value;
    count += 1;   
  } 

  decimal average = sum / count; 

  averageResultsLabel.Text = average.ToString("f2");
  highestResultsLabel.Text = max.ToString();
  lowestResultsLabel.Text = min.ToString();
foreach

  foreach(decimal value in sales) {
    salesListBox.Items.Add(value);
    ... 
  }      

您只需使用IEnumerbale的扩展方法即可完成所有这些工作。虽然您不能做太多,但您始终可以将问题分解为更小的部分。例如,您询问的是三个不同的值:从一开始,即平均值。第二步:您已经知道如何为标签赋值,只需要计算数组元素的平均值,这里已经提出了这个问题:
decimal[]sales=File.ReadLines(“sales.txt”).Select(line=>decimal.Parse(line)).ToArray()-您不必使用streams@MongZhu谢谢老兄,好成绩,谢谢你!我正在尝试您的非linq解决方案,但仍有问题。我能把程序发给你吗?@MozzJonas,看看编辑是否有用。你算出平均销售额了吗?@MozzJonas我在评论中问你这些问题是有原因的。我想帮助你自己开发算法。你愿意回答吗?@MozzJonas想象你有10个人站成一排。你从第一个走到最后一个。你如何找到最有才华的人?你会检查第一个人是否比你记忆中的那个人高,如果是,那么你会记得那个人,然后去下一个,比较他是否比你记忆中的那个人高。如果是这样,你会用新的人覆盖你的记忆,等等1)为什么要使用
类型的
?一个简单的
sales.ToList()
也可以这样做2)哪里需要将数组转换为列表?
decimal[]
实现
IEnumerable
,此接口定义方法
Average
Min
。因此数组可以自己调用这些方法OfType是冗余的,因为所有元素都是十进制的,而ToList是不必要的,因为Min/Max/Avg是在IEnumerable上定义的,数组已经实现了IEnumerable。是的,非常好而且简单。但不幸的是,我需要使用数组来获得满分。
  decimal max = 0;
  decimal min = 0;
  decimal sum = 0;
  int count = 0;      

  foreach(string line in File.ReadLines("Sales.txt")) {
    decimal value = decimal.Parse(line);

    salesListBox.Items.Add(value);

    if (count == 0 || value > max)
      max = value;

    if (count == 0 || value < min)
      min = value;

    sum += value;
    count += 1;   
  } 

  decimal average = sum / count; 

  averageResultsLabel.Text = average.ToString("f2");
  highestResultsLabel.Text = max.ToString();
  lowestResultsLabel.Text = min.ToString();
  decimal[] sales = File
    .ReadLines("Sales.txt")
    .Select(line => decimal.Parse(line))
    .ToArray();
  foreach(decimal value in sales) {
    salesListBox.Items.Add(value);
    ... 
  }