开发者

How come my "calculate" will not work?

I need to create a simple c# application to add some quarterly figures. I am using arrays to "store" the data and then place it in a textbox.

Anyways, I am having some issues with my calculate section. I have put comment tags around it so you guys can easily find it. The area works, but it requires two clicks and adds it to the line above. I have been looking at the same few lines for about an hour and can not seem to figure this one out. Any ideas out there?

    //Global
    int lastIndexUsed = -1;
    int[,] quarters = new int[10, 5];
    string[] Branch = new string[10];

    public FrmSales()
    {
        InitializeComponent();
    }

    private void txtBranch_TextChanged(object sender, EventArgs e)
    {

    }

    private void btnCalc_Click(object sender, EventArgs e)
    {
        int Q1;
        int Q2;
        int Q3;
        int Q4;


        Q1 = int.Parse(txtQ1.Text);
        Q2 = int.Parse(txtQ2.Text);
        Q3 = int.Parse(txtQ3.Text);
        Q4 = int.Parse(txtQ4.Text);

        lastIndexUsed = lastIndexUsed + 1;
        quarters[lastIndexUsed, 0] = Q1;
        quarters[lastIndexUsed, 1] = Q2;
        quarters[lastIndexUsed, 2] = Q3;
        quarters[lastIndexUsed, 3] = Q4;
        Branch[lastIndexUsed] = txtBranch.Text;








        //Display R开发者_JAVA技巧esults

        int ctr;
        int ctr2;
        string outLine;
        string tempName;

        int row;
        int col;
        int accum;


        txtInfo.Text = "";

        outLine =           "  Branch       Q1         Q2         Q3         Q4       Total   " + "\r\n";
        outLine = outLine + "========== ========== ========== ========== ========== ==========" + "\r\n";

        txtInfo.Text = outLine;


        for (ctr = 0; ctr <= lastIndexUsed; ctr++)
        {

            outLine = "";

            tempName = Branch[ctr].PadLeft(10);
            outLine = outLine + tempName + " ";

            for (ctr2 = 0; ctr2 <= 4; ctr2 = ctr2 + 1)

            {


                outLine = outLine + quarters[ctr, ctr2].ToString().PadLeft(10) + " ";

            }

            txtInfo.Text = txtInfo.Text + outLine + "\r\n";


        }

        //Calculate ###########################################################

        for (row = 0; row <= lastIndexUsed; row++)
        {

            accum = 0;


            for (col = 0; col <= 3; col++ )
            {

                accum = accum + quarters[row, col];

            }
            quarters[row, 4] = accum;
        }




        //End Calculate #########################################################

    }

    private void btnClear_Click(object sender, EventArgs e)
    {
        txtBranch.Text = "";
        txtQ1.Text = "";
        txtQ2.Text = "";
        txtQ3.Text = "";
        txtQ4.Text = "";
        txtInfo.Text = "";

    }

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


The problem is simple: you use the quarters array before you actually calculate the values for it. Move the "calculate" loop to be above the first loop.

Also (among other things):

  • Too many blank lines and whitespace; makes it hard to read
  • Don't try to make a formatted report using text; just use a DataGridView or similar
  • If you click the button enough times, you will have an array index out of bounds exception, because lastIndexUsed will go above 10.
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜