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)
这就是问题:
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类型日期/时间类型是可怕的.)
| 归档时间: |
|
| 查看次数: |
143 次 |
| 最近记录: |