【问题标题】:writing program using arrays and averages in C#在 C# 中使用数组和平均值编写程序
【发布时间】:2017-02-10 01:04:15
【问题描述】:

我正在使用 C# 中的 GUI 编写一个程序,其中包括三个文本框(一个用于姓名输入,一个用于成绩输入,一个用于成绩输出)和五个按钮(一个用于输入姓名/成绩并添加到相应的数组,一个只显示刚刚输入的姓名和成绩,一个显示最低成绩,一个显示最高成绩,一个显示班级平均成绩)。

我设计了表单,但需要一些代码方面的帮助,有两个数组,一个用于成绩,一个用于姓名,它们最初存储了五个值。这是我到目前为止的代码:

    namespace WindowsFormsApplication3
{
using static System.Console;
public partial class highestGrade : Form
{
    int[] grade = new int[] { 90, 80, 60, 70, 80, };
    string[] name = new string[] { "Sally", "Joe", "Sue", "Pete", "Tom", };
    double sum = 0;
    double average;
    int x = 4;
    int y = 4;
    int z = 0;
    public highestGrade()
    {
        InitializeComponent();
    }

    private void label1_Click(object sender, EventArgs e)
    {

    }

    private void label2_Click(object sender, EventArgs e)
    {

    }

    private void addStudent_Click(object sender, EventArgs e)
    {
        if (x <= 9)
        {
            Array.Sort(grade, name);
            name[x] = textBox1.Text;
            grade[x] = Convert.ToInt32(textBox2.Text);
            sum = sum + grade[x];
            textBox1.Text = string.Empty;
            textBox2.Text = string.Empty;
        }


    }

    private void display_Click(object sender, EventArgs e)
    {
        outputText.Visible = true;
        outputText.Text = textBox1.Text + "   " + textBox2.Text;
    }

    private void lowestGrade_Click(object sender, EventArgs e)
    {
        Array.Sort(grade, name);
        outputText.Visible = true;
        outputText.Text = name[z] + "  " + grade[z];
    }

    private void button4_Click(object sender, EventArgs e)
    {

        Array.Sort(grade, name);
        outputText.Visible = true;
        outputText.Text = name[y] + "  " + grade[y];

    }

    private void averageGrade_Click(object sender, EventArgs e)
    {

        for (int y = 0; y < 5; y++)
        {
            sum = sum + grade[y];
        }
        average = sum / grade.Length;
        string avgOutput = Convert.ToString(average);
        outputText.Visible = true;
        outputText.Text = "Class Average:   " + avgOutput;
        y++;
        }

}
}

我需要该程序输入最多 10 名学生的成绩/姓名,同时能够在用户点击时连续输出最低/最高成绩。它还需要在用户点击时连续输出总平均值。

平均值计算不正确,每次单击平均值按钮时,它都会不断增加总和,我无法获得最高分来保持其值。例如:如果我输入一个新等级为 100,然后单击最高等级,它会显示我想要的那个等级。但是如果我输入 95 到下一个年级,它会将 100 替换为 95。

任何帮助将不胜感激,谢谢。

【问题讨论】:

  • 试试dotnetperls.com/average.. 最低/最高只需排序并抓取数组中的第一个或最后一个....
  • 你最好切换到List&lt;int&gt;

标签: c# visual-studio


【解决方案1】:

您必须先重置当前的sum,然后再次添加成绩才能正确计算平均值:

private void averageGrade_Click(object sender, EventArgs e) {

    sum = 0; // reset sum

    for (int y = 0; y < 5; y++) {
        sum = sum + grade[y];
    }
    average = sum / grade.Length;
    string avgOutput = Convert.ToString(average);
    outputText.Visible = true;
    outputText.Text = "Class Average:   " + avgOutput;
}

你也可以使用LINQ来计算总和和平均值,不需要写for循环:

using System.Linq;
var sum = grade.Sum();
var average = grade.Average();

至于最低/最高等级的问题:每次点击按钮时计算这些。消除全局变量yz

private void lowestGrade_Click(object sender, EventArgs e) {
    // this probably only needs to be sorted if a value is added or removed (addStudent_Click)           
     Array.Sort(grade, name); 
     outputText.Visible = true;

     // first element (with index 0) will be the lowest because arrays are sorted now
     outputText.Text = name[0] + "  " + grade[0]; 
 }

您还可以使用 LINQ .First().Last() 访问集合的第一个或最后一个元素,或者无需排序使用 LINQ .Min().Max() 方法。

【讨论】:

    猜你喜欢
    • 2012-03-14
    • 2020-10-23
    • 1970-01-01
    • 2022-01-16
    • 2014-12-12
    • 2017-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多