Переменная 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;
}
Другие вопросы по тегам