ArrayIndexOutOfBounds员工数据库程序的异常

Ale*_*lea 1 java database indexoutofboundsexception

我是java的新手,并且一直试图用它来衡量它.我一直在努力写一个概念验证员工数据库.一切正常,直到我输入最后一个员工条件,然后我得到一个ArrayIndexOutOfBoundsException.这是我的两个文件的代码.任何帮助,将不胜感激.

import java.util.Scanner;
public class EmployeeInterface 
{
    public static void main(String[] args)
    {
        Scanner Input = new Scanner(System.in);

        System.out.println("Please enter the number of employees to register.");
        int employeeCount = Input.nextInt();
        Employee.setEmployeeNumber(employeeCount);
        String employeeFullName;
        String employeeAddress;
        String employeeDateOfHire;

        for(int x = 0; x <= employeeCount; x++)
        {
            System.out.println("Please enter the full name of employee number " + (x + 1));
            Input.nextLine();
            employeeFullName = Input.nextLine();
            System.out.println("Please enter the address of employee number " + (x + 1));
            employeeAddress = Input.nextLine();
            System.out.println("Please enter the date of hire for employee " + (x + 1));
            employeeDateOfHire = Input.nextLine();

            Employee.employeeRegister(x, employeeFullName, employeeAddress, employeeDateOfHire);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这是第二个文件:

public class Employee 
{
    private static int employeeCount;
    private static String employees[][] = new String[employeeCount][4];

    public static void setEmployeeNumber(int x)
    {
        employeeCount = x;
    }

    public static void employeeRegister(int employeeNumber, String employeeFullName, String address, String employeeHireDate)
    {
        employees[employeeNumber][0] = employeeFullName;
        employees[employeeNumber][1] = employeeFullName;
        employees[employeeNumber][2] = employeeFullName;
        employees[employeeNumber][3] = employeeFullName;
    }
}
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 7

这就是问题:

for(int x = 0; x <= employeeCount; x++)
Run Code Online (Sandbox Code Playgroud)

你是用<=而不是<.因此,如果employeeCount是3,您实际上会询问4名员工的详细信息,并使用索引0,1,2和3 - 但3是3号数组的无效索引.

你的setEmployeeCount方法被破坏了 - 它改变了数值employeeCount,但是没有重新初始化数组,所以你总是会得到一个大小为0的数组.鉴于你已经说过代码可以工作到最后一个条目,我怀疑这不是你真实代码中的问题,否则你会在第一个条目上遇到异常.

也就是说,我强烈建议您创建一个更有用的Employee类型,其中包含数字,名称等的私有实例字段...然后创建一个List<Employee>.(通过静态字段存储它可能没有任何意义Employee- 如果你想要两个员工名单怎么办?)

另外,employeeHireDate应该采用一些适当的时间顺序类型 - 而不是字符串.(我建议使用LocalDate来自约达时间为内置的Java类型日期/时间类型是可怕的.)