簡體   English   中英

Java-For循環(執行/執行)無限期重復

[英]Java - For loop (do/while) repeats indefinitely

我一直在為我的課程設計一個項目。 這是一個簡單的薪水計算器,我已經很輕松地弄清楚了,它的功能也很完美。 它還考慮了佣金基准。 但是,我已經完成了最后一部分。 我無法使其正常運行。 它可以無限循環,也可以在“總補償”列下生成靜態數字(根據佣金等,它們應該是動態的)。

  • 鮑勃一年賺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);

            }          

任何建議或技巧都將成為救命稻草。

此代碼將迭代直到表達式(PotentialSales < AcceleratorGoal)false為止。 由於您沒有在do{..body..}while(expression)的正文中更新PotentialSalesAcceleratorGoal的值,因此如果(PotentialSales < AcceleratorGoal)首先為true ,它將無限期地進行迭代,否則它將被執行一次並且在while條件之后將轉到下一條語句。

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

您可能想要更新do while循環主體內的PotentialSalesAcceleratorGoal值,或更改wrt output變量的條件。

接下來的兩個do..while循環也是如此。

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

運行此示例代碼,您將了解問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM