2012-04-21 1 views
0

Я просто действительно изучаю Java, просматривая учебники в книге «Java, как программировать» Deitel и Deitel, поэтому, пожалуйста, простите любые основные ошибки I ' м. Я понимаю, что моя методология может быть не лучшей, но я надеюсь ее улучшить.Неправильно выполняется как «if», так и «else» в цикле While в Java

Моя проблема: я считаю, что неправильно построила свою программу. При выполнении программы выводятся параметры IF и ELSE.

Если кто-нибудь может сказать мне, почему оба варианта исполнения было бы очень признателен

Deepend

package controlStatments; 
import java.util.Scanner; 

public class Review_4_20 
{ 
    public static void main(String[] args) 
    { 
     Scanner input = new Scanner(System.in); 

     //Declare Variables 
     double employeeOneRate; 
     double employeeOneHours; 
     double employeeTwoRate; 
     double employeeTwoHours; 
     double employeeThreeRate; 
     double employeeThreeHours; 
     int calculator; 
     double employeeOneTotalPay; 
     double employeeOneNormalPay; 
     double employeeOneTotalPayOverTime; 
     double overTimeRate; 

     //Initiate Variables 
     employeeOneRate = 0; 
     employeeOneHours = 0; 
     employeeTwoRate = 0; 
     employeeTwoHours = 0; 
     employeeThreeRate = 0; 
     employeeThreeHours = 0; 
     calculator = 0; 
     employeeOneTotalPay = 0; 
     employeeOneTotalPayOverTime = 0; 
     overTimeRate = 1.5; 
     employeeOneNormalPay = 0; 

     //Create While Loop 
     while (calculator != -1) 
     { 
      //Prompt user to input details 
      System.out.print("\n\nPlease input the first employees rate"); 
      employeeOneRate =input.nextDouble(); 

      System.out.print("Please input the first employees Hours"); 
      employeeOneHours =input.nextDouble(); 

      if (employeeOneHours <= 40) 
      { 
       employeeOneTotalPay = employeeOneHours * employeeOneRate; 
       System.out.printf("\nNormal time pay is: %.2f", employeeOneTotalPay); 
      } 
      else 
       employeeOneNormalPay = employeeOneRate * 40; 
      employeeOneTotalPayOverTime = (employeeOneHours - 40) * (employeeOneRate * overTimeRate) + employeeOneNormalPay;        
      System.out.printf("\n\nTotal Pay including Overtime is: %.2f", employeeOneTotalPayOverTime); 
     } 
    } 
} 
+1

P.S. Java позволяет инициализировать переменные inline; то есть вместо объявления и инициализации вы можете просто объявить И инициализировать в одной строке: double overTimeRate = 1.5; Это сделает ваш пример очень удобочитаемым. –

+0

Спасибо Arturs, что поможет много – Deepend

ответ

1

Изменить

if (employeeOneHours <= 40) 
     { 
      employeeOneTotalPay = employeeOneHours * employeeOneRate; 
      System.out.printf("\nNormal time pay is: %.2f", employeeOneTotalPay); 
     } 
     else 
      employeeOneNormalPay = employeeOneRate * 40; 
     employeeOneTotalPayOverTime = (employeeOneHours - 40) * (employeeOneRate * overTimeRate) + employeeOneNormalPay;        
     System.out.printf("\n\nTotal Pay including Overtime is: %.2f", employeeOneTotalPayOverTime); 

С:

if (employeeOneHours <= 40) 
     { 
      employeeOneTotalPay = employeeOneHours * employeeOneRate; 
      System.out.printf("\nNormal time pay is: %.2f", employeeOneTotalPay); 
     } 
     else 
     { 
      employeeOneNormalPay = employeeOneRate * 40; 
     employeeOneTotalPayOverTime = (employeeOneHours - 40) * (employeeOneRate * overTimeRate) + employeeOneNormalPay;        
     System.out.printf("\n\nTotal Pay including Overtime is: %.2f", employeeOneTotalPayOverTime); 
} 
7

Вы забыли кронштейн в своем заявлении еще.

Я supose это должно быть так:

if (employeeOneHours <= 40) 
    { 
     employeeOneTotalPay = employeeOneHours * employeeOneRate; 
     System.out.printf("\nNormal time pay is: %.2f", employeeOneTotalPay); 
    } 
    else { 
     employeeOneNormalPay = employeeOneRate * 40; 
     employeeOneTotalPayOverTime = (employeeOneHours - 40) * 
       (employeeOneRate * overTimeRate) + employeeOneNormalPay;         
     System.out.printf("\n\nTotal Pay including Overtime is: %.2f", employeeOneTotalPayOverTime); 
    } 

Если вы не установлены кронштейны только первая линия включает в IF/ELSE утверждения.

+0

Спасибо всем за ваши ответы, не забудем об этом в следующий раз – Deepend

+0

@deepend Это не плохая привычка всегда использовать фигурные скобки, даже если они не являются обязательными. Иногда мы сопротивляемся, потому что они выглядят более «Элегантными» без них, когда есть только одно утверждение, но я никогда не слышал, чтобы кто-то сожалел об использовании скобок, когда они были необязательными, но у каждого есть хотя бы один случай, когда они хотят, чтобы они просто использовали их. –

1

заявление в квадратных скобках, такие как if, else if, else и петлях выполнить только линию сразу после него, если нет кронштейна впоследствии.

Итак, ваше заявление:

if (employeeOneHours <= 40) 
{ 
    employeeOneTotalPay = employeeOneHours * employeeOneRate; 
    System.out.printf("\nNormal time pay is: %.2f", employeeOneTotalPay); 
} 
else 
    employeeOneNormalPay = employeeOneRate * 40; 
    employeeOneTotalPayOverTime = (employeeOneHours - 40) * (employeeOneRate * overTimeRate) + employeeOneNormalPay;        
    System.out.printf("\n\nTotal Pay including Overtime is: %.2f", employeeOneTotalPayOverTime); 

всегда умножает employeeOneNormalPay.

Изменить это:

if (employeeOneHours <= 40) { 
    employeeOneTotalPay = employeeOneHours * employeeOneRate; 
    System.out.printf("\nNormal time pay is: %.2f", employeeOneTotalPay); 
} else { 
    employeeOneNormalPay = employeeOneRate * 40; 
    employeeOneTotalPayOverTime = (employeeOneHours - 40) * (employeeOneRate * overTimeRate) + employeeOneNormalPay;        
    System.out.printf("\n\nTotal Pay including Overtime is: %.2f", employeeOneTotalPayOverTime); 
} 
Смежные вопросы