【问题标题】:Finding average of the numbers user's type into an array在数组中查找用户类型的数字平均值
【发布时间】:2023-03-16 21:08:01
【问题描述】:

有人可以向我解释为什么当我运行我的程序时我的平均值一直为 0 吗?我在这里列出了我项目的全部代码,并且之前从未使用过数组。另外,这个数组的名称是 mData 吗?我尝试阅读我的书以确定要在这些项目中寻找什么,但一无所获。

public partial class frmMain : Form
{

    private const int mSize = 20;
    private int[] mData = new int[mSize];
    private int mIndex = 0;


    private static void Main()
    {
        frmMain main = new frmMain();
        Application.Run(main);
    }
    private frmMain()
    {
        InitializeComponent();
    }

    private void btnEnter_Click(object sender, EventArgs e)
    {
        int num;
        num = int.Parse(txtInput.Text);

        //store num in the array
        mData[mIndex] = num;
        mIndex = mIndex + 1;

        //check for full array
        if (mIndex == mSize)
        {
            //inform user that array is full
            MessageBox.Show("The array is full.");
            btnEnter.Enabled = false;
        }
    }

    private void btnExit_Click(object sender, EventArgs e)
    {
        Close();
    }

    private void btnDisplay_Click(object sender, EventArgs e)
    {
        int n;

        for (n = 0; n < mIndex; n++)
            listBoxOutput.Items.Add(mData[n]);
    }

    private void btnAverage_Click(object sender, EventArgs e)
    {

        int sum = 0;
        int average = 0;

        if (mIndex == 0)
        {
            //inform user that array is empty
            MessageBox.Show("The array is empty.");
        }

        //add up the values
        for (int i = 0; i < mData.Length; i++)
        {
            sum += mData[i];
        }

        //divide by the number of values
        average = sum / mSize;

        listBoxOutput.Items.Add("The average of the array is: " + average);
    }

}

【问题讨论】:

    标签: c# arrays sum average


    【解决方案1】:

    一个问题是您使用的是整数。如果最终值是小于 1 的小数,则 int 平均值将存储 0。将平均值更改为浮点数将解决此问题。此外,除非您知道整个数组已填满,否则不应除以 mSize。用户可以插入一个值,但会用 19 个 0 求平均值。

    【讨论】:

    • 您可以只除以 mIndex,因为它已经存储了数组中的数字数量。您也可以使用 mIndex 作为循环中对数字求和的限制,但这部分很好,因为它只是在通过最终用户输入的数字后将 0 添加到总和。
    • 非常感谢。我没有意识到数组的其余部分充满了 0。这帮助很大。
    【解决方案2】:

    由于averagesummSize是整数,当你将它们相除时,结果将被截断。

       average = sum / mSize;
    

    所以如果sum/mSize 小于1,average 将始终等于0

    要获得平均小数点,请将声明更改为

        double average = 0;
    

    和计算

    average = (double)sum / (double)mSize;
    

    【讨论】:

      【解决方案3】:

      数组有一个内置属性来计算平均值,它返回一个十进制值作为输出。示例如下

      int[] 整数 = 新的 int[] { 1, 2, 3 }; Console.WriteLine(integer.Average().ToString());

      希望这会有所帮助。

      【讨论】:

        猜你喜欢
        • 2017-06-11
        • 1970-01-01
        • 2020-09-06
        • 1970-01-01
        • 1970-01-01
        • 2021-12-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多