gpt4 book ai didi

java - 员工数据库程序的 ArrayIndexOutOfBounds 异常

转载 作者:搜寻专家 更新时间:2023-10-30 21:40:39 25 4
gpt4 key购买 nike

我是 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);
}
}
}

这是第二个文件:

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;
}
}

最佳答案

问题是:

for(int x = 0; x <= employeeCount; x++)

您正在使用 <=而不是 < .所以如果employeeCount是 3,您实际上会询问 4 名员工的详细信息,并使用索引 0、1、2 和 3 - 但 3 是大小为 3 的数组的无效索引。

你的 setEmployeeCount方法坏了——它改变了employeeCount的值,但不会重新初始化数组,因此您总是会得到一个大小为 0 的数组。鉴于您已经说过代码在最后一个条目之前有效,我怀疑这不是您的问题 真正的 代码,否则您会在第一个条目上遇到异常。

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

另外,一个 employeeHireDate应该是某种适当的按时间顺序排列的类型——而不是字符串。 (我建议使用 LocalDate 来自 Joda Time,因为日期/时间类型的内置 Java 类型很糟糕。)

关于java - 员工数据库程序的 ArrayIndexOutOfBounds 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18302163/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com