0

プログラムを実行したときに平均が 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);
    }

}
4

3 に答える 3

0

配列には、出力として小数値を返す平均を計算する組み込みのプロパティがあります。例は以下です

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

お役に立てれば。

于 2012-11-07T23:47:48.687 に答える
0

averagesumおよびmSizeは整数であるため、それらを割ると結果は切り捨てられます。

   average = sum / mSize;

sum/mSizeが 1 未満の場合、常にaverage0 に等しくなります

平均を取得する 小数点を持たせる 宣言を次のように変更する

    double average = 0;

と計算

average = (double)sum / (double)mSize;
于 2012-11-07T22:46:55.603 に答える
0

1 つの問題は、int を使用していることです。最終値が 1 未満の小数の場合、int 平均は 0 を格納します。平均を float に変更すると、これが解決されます。また、配列全体が満たされていることがわかっていない限り、mSize で除算しないでください。ユーザーは 1 つの値を挿入できますが、平均すると 19 個の 0 になります。

于 2012-11-07T22:48:54.327 に答える