Я не могу заставить его делать вычеты прямо по программе расчета заработной платы в java. ошибка, которую я получаю, это то, что одна из моих переменных не была инициализирована

avatar
Jasmin Wind
8 августа 2021 в 17:54
30
1
0

Я получаю сообщение об ошибке: C:\Users\Jasmi\payroll\src\Payroll.java:68:38 java: возможно, переменная GrossPay не была инициализирована, но я не уверен, как это исправить.

public class Payroll {
    public String calculateGrossPay;
    public String calculateNetPay;
    private String name;
    private int idNumber;
    private double hourlyPayRate;
    private double hoursworked;

    Payroll(String nameGiven, int idNumbergiven) {
        name = nameGiven;
        idNumber = idNumbergiven;
        hourlyPayRate = 7.15;
        hoursworked = 0;
    }

    public String getName() {
        return name;
    }

    public int getIDNumber() {
        return idNumber;
    }

    public double getHourlyPayrate() {
        return hourlyPayRate;
    }

    public double getHoursWorked() {
        return hoursworked;
    }

    public void setName(String nameGiven) {
        name = nameGiven;
    }

    public void setIDNumber(int idNumbergiven) {
        idNumber = idNumbergiven;
    }

    public void setHourlyPayRate(double hourlypayrategiven) {
        hourlyPayRate = hourlypayrategiven;
    }

    public void setHoursWorked(double hoursworkedgiven) {
        hoursworked = hoursworkedgiven;
    }

    //gross pay plus overtime
    public double calculateGrossPay() {

        double overtime;
        overtime = 0;
        double grossPay;
        if (hoursworked < 40) grossPay = hourlyPayRate * hoursworked;
        else {
            overtime = hoursworked - 40;
            grossPay = (overtime * 1.5 * hourlyPayRate) + (40 * hourlyPayRate);
        }

        return grossPay;

    }

    //deductions
    public double calculateNetPay() {
        double netPay;
        double grossPay;
        double deduction = (.2579) * grossPay;

        return netPay;


    }
}

Вот второй документ:

import javax.swing.JOptionPane;

    public class PayrollClassTest {
        public static void main(String[] args) {

            String userInputString;
            String userName;
            int userId;
            double userhourlyPayRate;
            double userHoursworked;

            userName = JOptionPane.showInputDialog("enter the name of this employee: ");
            userInputString = JOptionPane.showInputDialog("Please enter employee ID:  ");
            userId = Integer.parseInt(userInputString);
            userInputString = JOptionPane.showInputDialog("Please enter Hourly Pay Rate:  ");
            userhourlyPayRate = Double.parseDouble(userInputString);
            userInputString = JOptionPane.showInputDialog("Enter the hours worked:  ");
            userHoursworked = Double.parseDouble(userInputString);

            Payroll payroll1 = new Payroll(userName, userId);
            payroll1.setHourlyPayRate(userhourlyPayRate);
            payroll1.setHoursWorked(userHoursworked);
            System.out.println(payroll1.getName() + " has a gross pay of  " + payroll1.calculateGrossPay());
            System.out.println(payroll1.getName() + " has a net pay of  " + payroll1.calculateNetPay());
            System.exit(0);
        }

        private static void calculateGrossPay() {
        }
        private static void calculateNetPay() {
        }


    }

Я пытался изменить вычеты, чтобы они отображались следующим образом:

//deductions
    public double calculateNetPay() {
        double netPay = 0;
        double grossPay = 0;
        double deduction = (.2579) * grossPay;

        return netPay;


    }
}

Это работает, но результаты не показывают вычеты: Вот пример результатов: У Бетти валовая зарплата 13000,0 Чистая заработная плата Бетти составляет 0,0

.

Процесс завершен с кодом выхода 0 Это когда я ввожу имя как Бетти, брутто-зарплату как 100 и отработанные часы как 100. Это правильно показывает сверхурочную работу, но не отчисления.

Мы очень признательны за любую помощь. спасибо!

Источник

Ответы (1)

avatar
Shivam Puri
8 августа 2021 в 19:18
0

Если я правильно понял код, то в этом фрагменте кода вы ошибаетесь.

    public double calculateNetPay() {
        double netPay = 0;
        double grossPay = 0;
        double deduction = (.2579) * grossPay;

        return netPay;


    }

Во-первых: netPay не присвоено значение
Этот метод всегда будет возвращать 0. Причина: переменная netPay объявлена ​​и инициализирована значением 0.

То, что вы, вероятно, захотите сделать перед оператором return, возможно;

    netPay = grossPay - deduction;

Я могу ошибаться в этой логике, но я определенно прав, когда говорю, что вам нужно присвоить значение netPay, прежде чем вы вернете его.


Во-вторых: GrossPay не присвоено значение
В этом методе вы умножаете .2579 на grossPay, но GrossPay равен 0, который вы сейчас инициализировали.

Вы предполагаете, что переменная grossPay является общей для двух методов calculateGrossPay и calculateNetPay.

Это неправда.

Это две отдельные локальные переменные, которые объявляются отдельно в двух разных методах и имеют две разные области действия.
Вы можете узнать больше о области действия переменных Java здесь:



Я рекомендую сделать grossPay переменной класса вместо переменной метода, чтобы ее можно было использовать между двумя методами одного и того же экземпляра класса. (Предположим, что вы вызываете calculateGrossPay перед calculateNetPay каждый раз, так что grossPay может иметь правильное значение.)