0

抱歉发了这么多次。我被卡住了为什么结果为NULL。应该是真的还是假的。我认为检查值没有在员工类中链接。请告诉我是哪个问题。

public class Employee {
    String name;
    PrimeAgeChecker checks;
    int age;
    Department department;
    public ArrayList<Employee> emplo;

    static Employee emp1 = new Employee(Department.Accounting,"Counting Guru",55);
    static Employee emp2 = new Employee(Department.Accounting,"Counting Pro", 45);
    static Employee emp3 = new Employee(Department.Accounting,"Counting Savvy", 40);
    static Employee emp4 = new Employee(Department.Accounting,"Counting Novice", 25);
    static Employee emp5 = new Employee(Department.Marketing,"Sales Guru", 50);
    static Employee emp6 = new Employee(Department.Marketing,"Sales Pro", 48);
    static Employee emp7 = new Employee(Department.Marketing,"Sales Savvy", 38);
    static Employee emp8 = new Employee(Department.Human_Resources,"Hiring Guru", 58);
    static Employee emp9 = new Employee(Department.Human_Resources,"Hiring Pro", 47);
    static Employee emp10 = new Employee(Department.Information_Systems,"Hacking Pro", 46);
    static Employee emp11 = new Employee(Department.Information_Systems,"Hacking Guru", 51);
    static Employee emp12 = new Employee(Department.Information_Systems,"Hacking Savvy", 38);
    static Employee emp13 = new Employee(Department.Information_Systems,"Hacking Novice", 23);

    Employee(Department department,String name, int age)
    {
        this.department = department;
        this.name = name;
        this.age = age;
    }


    public int getAge()
    {
        return age;
    }

    public String getName()
    {
        return name;
    }

    public PrimeAgeChecker GetChecker(PrimeAgeChecker checks)
    {
        return checks;

    }

    public void addEmplo(Employee x){
        if (emplo.isEmpty())
        {
            emplo.add(x);
        }
        else
        {
            int i;
            for ( i = 0;i <emplo.size(); ++i){
                if(emplo.get(i).getAge() > x.getAge()){
                    emplo.add(i,x);
                    break;
                }
            }

            if ( i == emplo.size()){
                emplo.add(x);
            }
        }
        }

    public ArrayList<Employee> getEmplo(){
        return emplo;
    }

    public String toString(){
        StringBuffer sb = new StringBuffer();
        sb.append(getDept(department));
        sb.append("\t");
        sb.append(getName());
        sb.append("\t");
        sb.append(getAge());
        sb.append("\t");
        sb.append(GetChecker(checks));

        return sb.toString();
    }

    private Department getDept(Department department){
        return department;
    }

}




public class PrimeAgeChecker{

    public boolean status = false;

    int ages;

    PrimeAgeChecker(Employee age)
    {
        ages = age.getAge();
    }


    public boolean check(){

            if ((ages % 2 == 0) || (ages == 2))
            {
                status = true;
            }

        return status;

    }
}

结果:

Department      Name    Age Prime
__________________________________________________
Accounting  Counting Guru   55  null
Accounting  Counting Pro    45  null
Accounting  Counting Savvy  40  null
Accounting  Counting Novice 25  null
Marketing   Sales Guru  50  null
Marketing   Sales Pro   48  null
Marketing   Sales Savvy 38  null
Human_Resources Hiring Guru 58  null
Human_Resources Hiring Pro  47  null
Information_Systems Hacking Pro 46  null
Information_Systems Hacking Guru    51  null
Information_Systems Hacking Savvy   38  null
Information_Systems Hacking Novice  23  null
4

2 回答 2

1

你的方法:

public PrimeAgeChecker GetChecker(PrimeAgeChecker checks){
    return checks;
}

没有意义,因为它只是重新调整它被赋予的价值。此外,您永远不会实例化名为checks. 稍后在您的代码中,当您调用 时GetChecker(checks),由于该变量从未被实例化,您将传递 null,然后返回 null。

如果你说它应该返回一个trueorfalse值,那么你需要:

  1. 将返回类型设置GetChecker为,并从方法签名boolean中删除参数。checks请记住,由于GetChecker方法是实例方法,并且checks字段也是同一个对象的实例成员,所以不需要将参数传递给方法;该方法可以简单地直接调用它。
  2. 实例化checks成员变量(很可能在构造函数中)
  3. 鉴于您的 PrimeAgeChecker 类看起来像它在做什么,我猜您打算调用return checks.check()

此外,一些小建议,您有两个拼写错误/命名约定错误:

  • 我猜你的emplo变量应该被命名employees或类似的东西。getter 和 setter 方法应该类似地重命名。
  • 与 Java 标准一样,该GetChecker方法的首字母应小写。这不会导致任何语法问题,因为 Java 并不关心,但它是这种语言的标准,如果它保持一致,它会使您的代码更容易被其他人(以及您自己)阅读。
于 2013-10-24T02:52:53.807 回答
0

您永远不会将变量设置checks为任何值,因此当您读取它时,它将具有 value null

我只能猜测您打算在Employee构造函数中设置此变量,如下所示:

Employee(Department department,String name, int age)
{
    this.department = department;
    this.name = name;
    this.age = age;
    this.checks = new PrimeAgeChecker(this);
}

PrimeAgeChecker此外,正如 Christian 所提到的,将 a 传递给是没有意义的GetChecker

于 2013-10-24T02:50:28.533 回答