0

我遇到了两个与 NullPointerExceptions 相关的错误,我想它们是相关的,所以我将发布我在尝试从salaryEmployee 对象添加员工时收到的错误。

这是我收到的错误:

Exception in thread "main" java.lang.NullPointerException
    at EmployeeList.getIndex(EmployeeList.java:40)
    at EmployeeDriver.main(EmployeeDriver.java:99)

EmployeeList.java

public class EmployeeList
{

    private final int EMPLOYEES_MAX = 50;
    private Employee[] employees = new Employee[EMPLOYEES_MAX];
    private int currentEmployees;

    public EmployeeList()
    {
        employees = new Employee[EMPLOYEES_MAX];
        currentEmployees = 0;
    }

    public int getIndex( int empNum )
    {
        int index = -1;
        for(int i = 0; i < currentEmployees; i++)
        {
            if(employees[i].getEmployeeNumber() == empNum)  *error here (line 40)*
            {
                index = i;
                i = 51;
            }
            else
            {
                index = -1;
            }
        }
        return index;
    }


    public void listAll()
    {
        for(int i = 0; i < currentEmployees; i++)
        {
            System.out.println(employees[i]); 
        }
    }

EmployeeDriver.java

do {
        // Display all current employees in the list
        empMgr.listAll();

        //Run the main menu to display options, read, validate and return the user's choice
        System.out.println("Main Menu");
        mainInput = mainMenu.runMenu();

        //Perform the Main Menu action requested by the user
        switch(mainInput) {
            //Add Employee main menu option
            case 1:
                // declare temporary variables for user input of employee values
                String fName, lname;
                char mid, gender, f;
                boolean ft = true;
                double amount;

                // get the employee type
                do {
                    System.out.println("\n1. Hourly");
                    System.out.println("2. Salary");
                    System.out.println("3. Commission");
                    System.out.print ("Enter Choice: ");
                    empType = in.nextInt();
                    if (empType < 1 || empType > 3) {
                        System.out.println ("Invalid Choice. Try Again!");
                    }
                }while (empType < 1 || empType > 3);

                System.out.print("Enter Last Name: ");
                lname = in.next();
                System.out.print("Enter First Name: ");
                fName = in.next();
                System.out.print("Enter Middle Initial: ");
                mid = in.next().charAt(0);
                System.out.print("Enter Gender: ");
                gender = in.next().charAt(0);

                // ask for employee number
                // search employee list for existing employee with that number
                // if number already exists, display an error message
                int en_index = -1;
                do {
                    System.out.print("Enter Employee Number: ");
                    empNum = in.nextInt();
                    // if empNum in range then check employee list to determine if
                    // employee number already exists
                    if (empNum >= 1 && empNum <= 99999) {
error                    en_index = empMgr.getIndex(empNum); *error here ( line 99 )*
                        if (en_index != -1)
                            System.out.println ("Employee number already used - Choose a new number");
                    }
                    else
                        System.out.println ("Employee number must be between 1 and 99999 inclusive");

                }while (en_index != -1 || (empNum < 1 || empNum > 99999));

                // determine if employee is a full time employee
                System.out.print("Full Time? (y/n): ");
                f = in.next().charAt(0);
                if(f == 'n' || f == 'N') {
                    ft = false;
                }

程序运行

java EmployeeDriver
Main Menu

Choose from the following options:
        1       Add Employee
        2       Process Employees by Type Submenu
        3       Remove Employee
        4       Sort Employees
        5       Calculate Weekly Payout
        6       Calculate Bonus
        7       Annual Raises
        8       Reset Week
        0       Quit
        Option: 1

1. Hourly
2. Salary
3. Commission
Enter Choice: 1
Enter Last Name: Johnson
Enter First Name: John
Enter Middle Initial: J
Enter Gender: M
Enter Employee Number: 100
Full Time? (y/n): y
Enter wage: 9.00
Employee Added to List
null
Main Menu

Choose from the following options:
        1       Add Employee
        2       Process Employees by Type Submenu
        3       Remove Employee
        4       Sort Employees
        5       Calculate Weekly Payout
        6       Calculate Bonus
        7       Annual Raises
        8       Reset Week
        0       Quit
        Option: 1

1. Hourly
2. Salary
3. Commission
Enter Choice: 2
Enter Last Name: Jone
Enter First Name: Johan
Enter Middle Initial: L
Enter Gender: M
Enter Employee Number: 101
Exception in thread "main" java.lang.NullPointerException
        at EmployeeList.getIndex(EmployeeList.java:40)
        at EmployeeDriver.main(EmployeeDriver.java:99)
4

1 回答 1

1

这真正意味着employees数组中的一个或多个条目是null. 我不知道为什么,因为问题中没有足够的信息。但是,如果您可以发布所有代码,我可以弄清楚并告诉您出了什么问题。

于 2013-10-20T23:13:51.957 回答