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