我正坐在大学里做作业,在某个时刻,我担心我真的没有完全理解Java或OOP概念中的一些基本知识。我将尝试使其尽可能短(也许只看第3个代码段就足够了,但是我只是想确定一下,我包括了足够的细节)。我要写一点员工管理。该项目中的一个类是employeeManagement本身,该类应具有一种通过气泡排序按首字母对员工进行排序的方法。
我为此编写了3个类:第一个是“ Employee”,它包含一个名称和一个ID(运行编号),getter和setter方法以及一种用于检查一个员工的第一个字母是否较小的方法(字母)。看起来像这样:
static boolean isSmaller(Employee source, Employee target) {
char[] sourceArray = new char[source.name.length()];
char[] targetArray = new char[target.name.length()];
sourceArray = source.name.toCharArray();
targetArray = target.name.toCharArray();
if(sourceArray[0] < targetArray[0])
return true;
else
return false;
}
我对其进行了测试,它似乎适合我的情况。现在,还有另一个名为EmployeeList的类,它通过一组雇员(“ Employee”对象)管理雇员。该数组的大小由构造函数确定。我的代码如下所示:
public class EmployeeList {
/*attributes*/
private int size;
private Employee[] employeeArray;
/* constructor */
public EmployeeList(int size) {
this.employeeArray = new Employee[size];
}
/* methods */
public int getSize() {
return size;
}
public void setSize(int size) {
this.size = size;
}
/* adds employee to end of the list. Returns false, if list is too small */
boolean add(Employee m) {
int id = m.getID();
if (id > employeeArray.length) {
return false;
} else {
employeeArray[id] = m;
return true;
}
}
/* returns employee at certain position */
Employee get(int index) {
return employeeArray[index];
}
/* Sets employee at certain position. Returns null, if position doesn't exist. Else returns old value. */
Employee set(int index, Employee m) {
if (employeeArray[index] == null) {
return null;
} else {
Employee before = employeeArray[index];
employeeArray[index] = m;
return before;
}
}
现在是我真正的问题:在名为“ employeeManagement”的第三类中,我应该实现排序算法。该类如下所示:
public class EmployeeManagement {
private EmployeeList ml = new EmployeeList(3);
public boolean addEmployee(Employee e) {
return ml.add(e);
}
public void sortEmployee() {
System.out.println(ml.getSize()); // I wrote this for debugging, exactly here lies my problem
for (int n = ml.getSize(); n > 1; n--) {
for (int i = 0; i < n - 1; i++) {
if (Employee.isSmaller(ml.get(i), ml.get(i + 1)) == false) {
Employee old = ml.set(i, ml.get(i + 1));
ml.set(i+1, old);
}
}
}
}
我的注释之前的“ println”在控制台中返回“ 0” ...我期望的是“ 3”,因为这是我在“ EmployeeManagement”类中为构造函数的参数“ EmployeeList”指定的大小。我的错误在哪里?以及如何访问在“ EmployeeManagement”类(“ 3”)中创建的对象的大小?我真的很期待您的回答!
谢谢,
ren
最佳答案
您没有在构造函数中存储size
。就像是,
public EmployeeList(int size) {
this.employeeArray = new Employee[size];
this.size = size; // <-- add this.
}
另外,
setSize
不会自动复制(并增长)阵列。您将需要复制数组,因为Java数组的长度是固定的。最后,由于size
具有employeeArray
,因此您实际上并不需要length
。