渐进式循环计算

时间:2014-06-15 16:30:04

标签: c# .net

确定。因此,我试图建立一个程序..用户输入他的工资,然后程序将计算他未来四年的工资,每年加薪2.5%。

我觉得我完全错了,因为我的循环只计算一次......它甚至没有显示四个工资......更不用说每次都提高了2.5%。

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是用户输入的工资。 label2是计算的显示。

----------------更新:我已用最终产品更新了代码。感谢大家特别帮助帕特里克霍夫曼!你是最好的......没有你,我无法做到。 ------------------------

        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"));
        }

3 个答案:

答案 0 :(得分:1)

我认为你应该有这样的事情:

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);
}

注意我对变量进行了一些更改。一些人被移动以使他们超过for循环。

步骤:

  1. 首先将起点(previous)设置为薪水。
  2. 每年将上一年的工资乘以+1的上升百分比。
  3. 设置上一个并将该年份的薪水添加到total
  4. 在标签中显示总数。

答案 1 :(得分:-1)

int count;
Salary = Convert.ToDecimal(txtSalary.Text);

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

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

您需要确保在开始时检索一次薪水,并且不要覆盖它直到结束。

答案 2 :(得分:-2)

问题1:每次使用默认值初始化时,您都会在forloop.so中声明变量。

解决方案1:为了保留最后分配的值,您需要将变量的声明移到循环之外。

问题2:您无法看到结果/更改,因为您正在更新for循环中的标签而没有任何延迟。因此,您只能看到最后计算的结果。

解决方案2:您需要创建4个不同的标签来显示4个不同的结果,或者您需要等待一段时间才能使用计时器功能在每次迭代中更新标签结果。

试一试:使用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");
    }
}