对Java

时间:2017-04-17 21:26:18

标签: java oop object constructor

我正坐在大学的任务上,而我正处于某种程度,我担心我在Java或OOP的概念中并没有真正理解一些基本的东西。我会尝试尽可能地缩短它(也许仅仅看一下第三个代码段就足够了,但我只想确保,我包含了足够的细节)。我要写一点员工管理。这个项目中的一个类是employeeManagement本身,这个类应该有一个通过bubblesort通过第一个字母对员工进行排序的方法。

我为此编写了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”,因为这是我将“EmployeeList”作为我的“EmployeeManagement”类中构造函数的参数的大小。我的错误在哪里?如何访问我在“EmployeeManagement”类(“3”)中创建的对象的大小?我真的很期待你的回答!

谢谢, Phreneticus

2 个答案:

答案 0 :(得分:2)

在构造函数中存储 size。像,

public EmployeeList(int size) {
    this.employeeArray = new Employee[size];
    this.size = size; // <-- add this.
}

此外,setSize不会自动复制(和增长)数组。您需要复制数组,因为Java数组具有固定长度。最后,由于size有一个employeeArray,因此您并不需要length

答案 1 :(得分:0)

您正在调用的大小变量是类字段。如果您快速查看代码,getter将获取该字段(在创建时将其初始化为零)。你正在使用它的大小。这样做的好方法是在getter中获取数组的大小:

public int getSize() {
   return employeeArray.length;
}

这将返回对象中数组的大小。