Переменная netPay постоянно говорит, что она не была инициализирована
Переменная netPay на
System.out.println("\t Regular Pay for 40.0 hour(s): $" + netPay);
продолжайте говорить, что это не было инициализировано. Единственный раз, когда это работает, это когда я беру операторы if-else.
public static void main(String [] args){
int employeeNumber;
double hourlySalary, weeklyTime, netPay, overTime, overTimehours;
Scanner keyboard= new Scanner(System.in);
System.out.println("Welcome to \"TEMPLE HUMAN RESOURCES\"");
System.out.println();
System.out.print("\t Enter Employee Number: ");
employeeNumber=keyboard.nextInt();
System.out.print("\t Enter Hourly Salary: ");
hourlySalary=keyboard.nextDouble();
System.out.print("\t Enter Weekly Time: ");
weeklyTime=keyboard.nextDouble();
System.out.println();
overTimehours=weeklyTime-40;
overTime=(1.5*10)*hourlySalary;
if (weeklyTime>40) {
netPay=(weeklyTime*hourlySalary)+(overTime*overTimehours);
}else if (weeklyTime==40){
netPay=40*hourlySalary;
}else {
overTimehours=0;
overTime=0;
}
System.out.println("\t Employee #: " + employeeNumber);
System.out.println("\t Hourly Salary: $" + hourlySalary);
System.out.println("\t Weekly Time: " + weeklyTime + " hour(s)");
System.out.println("\t Regular Pay for 40.0 hour(s): $" + netPay);
System.out.println("\t Overtime Pay for " +overTimehours+ " hour(s): $" + overTime);
System.out.println("\t Net Pay: $" + (overTime+ netPay));
System.out.println();
System.out.println("Thank you for using \"Temple Human Resources\"");
}
3 ответа
Представь это weeklyTime
было меньше 40 (скажем, 20 для примера).
netPay
находится в области, но ни if (weeklyTime>40)
ни else if (weeklyTime==40)
блоки будут действовать, чтобы инициализировать его. else
будет запущен блок, который не инициализируется netPay
совсем. Вам нужно будет изменить ваш блок else, чтобы дать netPay
ценность. Я не знаю достаточно о правилах расчета чистой заработной платы, чтобы знать, какую формулу вы захотите использовать в этом блоке else (weeklyTime < 40 является (неявным) условием для его ввода)
Я понял, это то, что я сделал, и это работает.
//if there's an overtime or no overtime
if (weeklyTime>40) {
netPay=(40*hourlySalary)+(overTime*overTimehours);
}
else if (weeklyTime==40){
netPay=40*hourlySalary;
}
else {
overTimehours=0;
overTime=0;
}
//Pay without overtime
netPay=(weeklyTime-overTimehours)*hourlySalary;
Я просто добавил его после оператора if-else.
Да потому что netPay
только инициализируется в ваших первых двух if
блоки. Что если эти условия не будут выполнены? Так как вы не инициализировали его значение, когда вы объявили его, и вы также не установили его внутри вашего else
то в этом случае он не инициализируется.
Что вы можете сделать, это либо инициализировать его в тот момент, когда вы его объявили, что-то вроде:
double netPay = 0;
или установите его в своем else
блок, как:
else {
overTimehours = 0;
overTime = 0;
netPay = 0;
}