[英]Java - For loop (do/while) repeats indefinitely
我一直在為我的課程設計一個項目。 這是一個簡單的薪水計算器,我已經很輕松地弄清楚了,它的功能也很完美。 它還考慮了佣金基准。 但是,我已經完成了最后一部分。 我無法使其正常運行。 它可以無限循環,也可以在“總補償”列下生成靜態數字(根據佣金等,它們應該是動態的)。
用戶輸入銷售編號(例如: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)
的正文中更新PotentialSales
& AcceleratorGoal
的值,因此如果(PotentialSales < AcceleratorGoal)
首先為true
,它將無限期地進行迭代,否則它將被執行一次並且在while
條件之后將轉到下一條語句。
碼
do{
String output = numberFormat.format(PotentialSales) + "\t\t" + numberFormat.format(BaseSalary);
System.out.println(output);
}while(PotentialSales < AcceleratorGoal);
您可能想要更新do while循環主體內的PotentialSales
或AcceleratorGoal
值,或更改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.