简体   繁体   中英

Progressive loop calculations

Ok. So I'm trying to have a program.. where the user enters his salary and then the program will calculate his salary for the next four years with a raise of 2.5% each year.

I feel like I have done this completely wrong, because my loop is only calculating one time.. its not even showing four salary's.. not to mention having them each raised 2.5% each time.

private void btnDisplay_Click(object sender, EventArgs e)
{     
    int count;
    for (count = 1; count <= 4; count++)
    {
        decimal Raise;
        decimal Salary;
        decimal Sum;
        decimal Total;

        Raise = Convert.ToDecimal(0.025);
        Salary = Convert.ToDecimal(txtSalary.Text);
        Sum = Salary * Raise;
        Total = Salary + Sum;
        label2.Text = Total.ToString("c");       
 }

txtSalary is whatever the user entered salary is. label2 is the display of the calculation.

---------------- UPDATE: I have updated the code with the final product. Thanks to everyone for helping out especially Patrick Hofman! You are the best.. I couldn't have done it without you. ------------------------

        private void btnDisplay_Click(object sender, EventArgs e)
    {
        decimal salary = Convert.ToDecimal(txtSalary.Text);
        decimal raise = 0.025m;

        decimal previous = salary;

        for (decimal year = 1; year <= 4; year++)
        {
            decimal sum = previous * (1 + raise);
            previous = sum;

            listBox1.Items.Add(sum.ToString("c"));
        }

I think you should have something like this:

private void btnDisplay_Click(object sender, EventArgs e)
{
    decimal salary = Convert.ToDecimal(txtSalary.Text);
    decimal raise = 0.025m;
    decimal total = 0;
    decimal previous = salary;

    listBox1.Items.Add("Start: {0:N2}", salary);

    for (int year = 1; year <= 4; year++)
    {
        decimal sum = previous * (1 + raise);
        previous = sum;

        total += sum;

        listBox1.Items.Add("Year {0}: {1:N2}", year, sum);
    }

    listBox1.Items.Add("Total: {0:N2}", total);
}

Note I made some changes to the variables. Some were moved to keep them over the for loop.

The steps:

  1. Start with setting the start point ( previous ) to the salary.
  2. For each year, multiply the previous year's salary with the raise percentage +1.
  3. Set the previous and add that year's salary to the total .
  4. Show the total in the label.
int count;
Salary = Convert.ToDecimal(txtSalary.Text);

for (count = 1; count <= 4; count++)
{
    Salary *= 1.025m;
}

label2.Text = Salary.ToString("c");

You need to make sure you're retrieve the salary once at teh beginning and don't overwrite it till the end.

Problem 1: You are declaring the variables inside the forloop.so each time they are initialised with their default values.

Solution 1: inorder to retain their last assigned values you need to move the declaration of the variables outside the loop.

Problem 2: you are not able to see the results/changes as you are updating the label inside the for loop without any delay.so evatually you can only see the last calculated result.

Solution2: You need to either create 4 different labels to show the 4 different results or you need to wait for some time for updating the label results in each iteration by using timer functionality.

Try This: using LabelArray

Label[] lblSalaries = new Label[4];
private void CreateControls()
{

        int x = 0, y = 10;

        for (int i = 0; i < lblSalaries.Length;i++ )
        {
            lblSalaries[i] = new Label();
            x += 60;
            lblSalaries[i].Size = new System.Drawing.Size(50, 30);
            lblSalaries[i].Location = new System.Drawing.Point(x,y);
            Controls.Add(lblSalaries[i]);
        }
}
private void btnDisplay_Click(object sender, EventArgs e)
{
        int count;
        decimal Raise;
        decimal Salary;
        decimal Sum;
        decimal Total;
    CreateControls();
    for (count = 1; count <= 4; count++)
    {
        Raise = Convert.ToDecimal(0.025);
        Salary = Convert.ToDecimal(txtSalary.Text);
        Sum = Salary * Raise;
        Total = Salary + Sum;
        lblSalaries[count-1].Text = Total.ToString("c");
    }
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM