0

我一直在为我的课程做一个项目。这是一个简单的工资计算器,我很容易计算出来,而且它的功能完美无缺。它还考虑了佣金基准。然而,我已经完成了最后一部分的切碎。我无法让它发挥作用。它要么无限循环,要么在“总薪酬”列下生成静态数字(它们应该是基于佣金等的动态数字)。

  • 鲍勃一年赚 85,000 美元。
  • 如果他的销售额低于 120,000 美元,他将不会获得奖金/佣金
  • 如果他当年的销售额 >= 120,000 美元,他将获得 15% 的佣金
  • 每 15 万美元的销售额(15 万、30 万、45 万等),他都会额外获得 2%

用户输入销售编号(例如:300,000 美元)。程序计算 BaseSalary + ($300,000 * .15) + ($300,000 * .02)

左侧是潜在销售额,右侧是总薪酬

200,000 ----------------------> (Calculated)

220,000 ----------------------> (Calculated)

240,000 ----------------------> (Calculated)

260,000 ----------------------> (Calculated)

280,000 ----------------------> (Calculated)

300,000 ----------------------> (Calculated)

//Variables defined here
        double Sales = input.nextDouble();
        double TotalCompensation;
        int Commission;
        double CommissionRate;
        double AcceleratedCommissionRate;
        int BaseSalary;
        double TargetSales;
        double Accelerator;
        double AcceleratorGoal;
        double AcceleratedCommission;

// Mathematical Operations
        Accelerator = 0.80;
        TargetSales = 150000;
        CommissionRate = 0.15;
        AcceleratedCommissionRate = ((CommissionRate) * (2.0));
        BaseSalary = 85000;
        Commission = (int) (Sales * CommissionRate);
        AcceleratedCommission = (double) (Sales * AcceleratedCommissionRate);
        AcceleratorGoal = (double) 120000; 


// If Else Logic Flow

        if(Sales < AcceleratorGoal)
        {
            TotalCompensation = BaseSalary;
            System.out.print("\nCommission Goal HAS NOT been met");
            System.out.println("\nTotal annual compensaton is: ");
            System.out.println(numberFormat.format(TotalCompensation));

        }

        else if(Sales < TargetSales)
        {
            TotalCompensation = BaseSalary + Commission;
            System.out.print("\nCommission Goal HAS been met");
            System.out.println("\nTotal annual compensaton is: ");
            System.out.println(numberFormat.format(TotalCompensation));
        }

        else if(Sales >= TargetSales)
        {
            TotalCompensation = BaseSalary + AcceleratedCommission;
            System.out.print("\nAccelerator Goal HAS been met");
            System.out.println("\nTotal annual compensaton is: ");
            System.out.println(numberFormat.format(TotalCompensation));

        }

// Potential Commission Structure Table

        double PotentialSales;
        double EndLoop = (Sales * 1.5);
        int Increment = 20000;

            System.out.println("\nPotential Sales\t\tTotal Compensation");

            for (PotentialSales = Sales; PotentialSales < EndLoop; 
            PotentialSales = PotentialSales += Increment)   
            {

                do
                {
                    String output = numberFormat.format(PotentialSales) + "\t\t" 
                    + numberFormat.format(BaseSalary);

                    System.out.println(output);
                }   
                    while(PotentialSales < AcceleratorGoal);

                do
                {
                    String output = numberFormat.format(PotentialSales) + "\t\t" 
                    + numberFormat.format(Commission + BaseSalary);

                    System.out.println(output);
                }
                    while(PotentialSales >= AcceleratorGoal && PotentialSales < TargetSales);

                do
                {
                    String output = numberFormat.format(PotentialSales) + "\t\t" 
                    + numberFormat.format(AcceleratedCommission + BaseSalary);

                    System.out.println(output);
                }
                    while(PotentialSales >= TargetSales);

            }          

任何建议或提示都将成为救命稻草。

4

2 回答 2

2

此代码将迭代直到表达式(PotentialSales < AcceleratorGoal)false。由于您没有在 的主体中更新PotentialSales&的值,因此如果是首先,它将无限期地迭代,否则它将被执行一次并在条件之后转到下一条语句。AcceleratorGoaldo{..body..}while(expression)(PotentialSales < AcceleratorGoal)truewhile

代码

do{
    String output = numberFormat.format(PotentialSales) + "\t\t" + numberFormat.format(BaseSalary);                   
    System.out.println(output);
}while(PotentialSales < AcceleratorGoal);

您可能想要更新do while 循环体内的PotentialSalesor值或更改条件 wrt变量。AcceleratorGoaloutput

接下来的两个do..while循环也是如此。

于 2015-08-09T05:41:02.930 回答
0

您的 do while 循环无限重复,因为您没有在 do while 循环中更新 PotentialSales 的值

要了解问题,请检查以下代码

int accelerationsales=5;
for(int potentialsales=0;potentialsales<5;potentialsales=potentialsales+=1) {
do {
    System.out.println("Hello");
   } while(potentialsales<accelerationsales);
}

运行这个示例代码,你就会明白问题所在。

于 2015-08-09T05:47:50.840 回答