【问题标题】:Java - For loop (do/while) repeats indefinitelyJava - For 循环(do/while)无限重复
【发布时间】:2015-11-01 06:45:49
【问题描述】:

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

  • Bob 年收入 85,000 美元。
  • 如果他的销售额低于 120,000 美元,他将不会获得任何奖金/佣金
  • 如果他的年度销售额 >= 120,000 美元,他将获得 15% 的佣金
  • 他每销售 15 万美元(15 万、30 万、45 万 等)

用户输入一个销售数字(例如: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);

            }          

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

【问题讨论】:

  • 无限循环,因为您的 while 循环条件始终为真。您是否尝试调试代码或打印“PotentialSales ,TargetSales, AcceleratorGoal ”的值,看看是什么导致了这个问题?
  • for循环中的增量条件PotentialSales = PotentialSales += Increment。这到底是什么意思?

标签: java loops if-statement while-loop for-else


【解决方案1】:

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

代码

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

您可能想要更新 do while 循环主体内的 PotentialSalesAcceleratorGoal 值或更改条件 w.r.t output 变量。

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

【讨论】:

  • 不要对非代码文本使用代码格式。也不需要所有其他奇怪的格式。它只会使帖子难以辨认。
  • 如果(PotentialSales &lt; AcceleratorGoal) 最初为真,它不会“无限期地迭代”。它将执行一次,如果该条件为真,则再次执行,依此类推。
  • 我没有得到 EJP 先生,这也是我的意思,if (PotentialSales &lt; AcceleratorGoal) 条件的第一个位置是在循环执行一次之后,即 while 条件......并且因为两个 PotentialSales 的值并且 AcceleratorGoal 在循环内没有改变。它将无限迭代。我的回答是假设 OP 知道 do..while 循环的执行流程。
  • 大家好,非常感谢您的帮助。这解决了我的问题!我并没有意识到我什至没有更新PotentialSales,而且它无限期地重复。非常感谢您的帮助。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多