Java - цикл For (do/while) повторяется бесконечно

Я работал над проектом для моего курса. Это простой калькулятор заработной платы, который я понял довольно легко, и он работает безупречно. Он также принимает во внимание контрольные показатели для комиссии. Я закончил рубить на последней части, однако. Я не могу заставить его функционировать. Он либо повторяется бесконечно, либо генерирует статические числа в столбце "Общая компенсация" (они должны быть динамическими в зависимости от комиссионных и т. Д.).

  • Боб зарабатывает 85 000 долларов в год.
  • Он не получает бонуса / комиссии, если продает менее 120 000 долларов
  • Он получает комиссию 15%, если его продажи за год>= $120 000
  • Он получает дополнительно 2% за каждые 150 тысяч долларов продаж (150 тысяч, 300 тысяч, 450 тысяч и т. Д.)

Пользователь вводит номер продажи (пример: $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);

            }          

Любые предложения или советы будут спасением.

2 ответа

Этот код будет повторяться до выражения (PotentialSales < AcceleratorGoal) является false, Поскольку вы не обновляете значение PotentialSales & AcceleratorGoal в теле do{..body..}while(expression)будет повторяться бесконечно, если (PotentialSales < AcceleratorGoal) является true на первом месте, иначе он будет выполнен один раз и перейдет к следующему оператору после while состояние.

Код

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

Вы можете обновить PotentialSales или же AcceleratorGoal Значение внутри тела цикла do while или условия изменения относительно output переменная.

То же самое касается следующих двух do..while петли.

Ваш цикл do while повторяется бесконечно, потому что вы не обновляете значение PotentialSales в цикле do while

Чтобы понять проблему, проверьте следующий код

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

Запустите этот пример кода, вы поймете проблему.

Другие вопросы по тегам