【发布时间】:2021-07-22 01:54:42
【问题描述】:
我制作了 2 个一维数组,并且想要对一个二维数组的值进行排序,以便它们可以在一维数组之间进行划分。
就上下文而言,我正在制作一个程序,该程序利用用户输入创建一个二维数组来组织受薪员工和小时工。
用户输入他们想要存储在员工数据库中的员工人数。然后他们输入 ID 号(employeeList),最后输入每个员工是受薪还是按小时(1 或 2),然后将这些数据存储到二维数组中。
例如,这里是一个示例employeeDatabase。
| EmployeeID | Salaried (1) or Hourly (2) |
|---|---|
| 123456 | 1 |
| 654321 | 2 |
我希望它输出: 员工 123456 是受薪员工。 员工 654321 是一名小时工。
我想将employeeDatabase 中的值分成数组salariedEmployees 和hourlyEmployees,但我不断收到“ArrayIndexOutOfBoundsException: 0”数组。导致问题的代码的 sn-p 如下。谢谢!
int salariedEmployeesSize = 0;
int hourlyEmployeesSize = 0;
int[] salariedEmployees = new int[salariedEmployeesSize];
int[] hourlyEmployees = new int[hourlyEmployeesSize];
for (int i = 0; i < employeeList.length - 1; i++) {
if (employeeDatabase[i][1] == 1) {
salariedEmployeesSize += 1;
salariedEmployees[i] = employeeDatabase[i][0];
} else if (employeeDatabase[i][1] == 2) {
hourlyEmployeesSize += 1;
hourlyEmployees[i] = employeeDatabase[i][0];
}
}
for (int i = 0; i < salariedEmployees.length - 1; i++) {
System.out.println("Employee " + salariedEmployees[i] + " is a salaried employee.");
}
for (int i = 0; i < hourlyEmployees.length - 1; i++) {
System.out.println("Employee " + hourlyEmployees[i] + " is an hourly employee.");
}
【问题讨论】:
-
您是否假设您的数组增加了它的大小,因为您更改了
hourlyEmployeesSize的值?不是,hourlyEmployees仍然是一个大小为 0 的数组。 -
如果您想动态添加元素,那么您应该使用 ArrayList 而不是 Array,或者您应该在添加元素之前正确定义数组的大小。
-
更重要的是,您总是创建大小为零的输出数组。选择阵列来解决这个问题是一个糟糕的选择。考虑用
Map代替二维表,用List代替一维表。你会惊讶于你想要完成的事情变得多么容易。 -
如果可能的话,我想利用二维和一维数组来解决这个问题。我希望 hourlyEmployeesSize 和 salariedEmployeesSize 增加:有什么阻止吗?
-
@jcpark,解决方案会更简洁,并且根据 java 使用 java api 包的最佳实践,例如
java.util,你有理由不使用这个包吗?你用的是哪个java版本?