构造函数混淆:将boolean设置为int参数

时间:2015-08-13 03:17:50

标签: java

public class Customer{
    private String name;
    private boolean child;
    private boolean student;

    public Customer(String nameIn, int age, boolean studentIn)
        name = nameIn;
        child = age;
        sutdent = studentIn;
    }

    public String getName(){
        return name;
    }

    public boolean isChild(){
        return age;
        if (age >= 0 && age <= 16){
            child = true;
        }
        else child = false;
        return child;
    }

    public boolean isStudent(){
        if studentIn = true{
             studentIn = true;
        }
        else 
            student = false;
        return student;
    }
}

你好,我已经被困在关于Java的论文的任务上已经有好几个小时了。这是两个类中的一个,另一个是应用程序类。我遇到的问题是构造函数类 - 我不确定要将'int age'指定给什么。正如你所看到的,我试图将它分配给'布尔型孩子',但这对我来说没有意义。我在这里错过了什么吗?我理解剩下的代码有点混乱,但是一旦我弄清楚构造函数类,我应该能够自己解决任何其他问题。

3 个答案:

答案 0 :(得分:0)

在构造函数中,age是一个int,并且您尝试将该整数分配给布尔字段。

您需要做的是计算客户是否是孩子,然后将该结果分配给该字段。所以你的课应该看起来像

public class Customer{
  private String name;
  private boolean child;
  private boolean student;
  private int age;

public Customer(String nameIn, int age, boolean studentIn)
    this.name = nameIn;
    this.age = age;
    this.student = studentIn;
    this.child = isChild();
}

public String getName(){
    return name;
}

public boolean isChild(){
    if (age >= 0 && age <= 16){
        return true;
    }
    else child = false;
    return child;
}

public boolean isStudent(){
    if studentIn = true{
         studentIn = true;
    }
    else 
        student = false;
    return student;
}

}

答案 1 :(得分:0)

您不需要会员private boolean child。这是按年龄计算的,但您必须通过创建成员变量private int age来记住年龄,然后您可以根据需要指定年龄。

public class Customer{
    private String name;
    private int age;
    private boolean student;

    public Customer(String nameIn, int ageIn, boolean studentIn)
        name = nameIn;
        age = ageIn;
        sutdent = studentIn;
    }

    public String getName(){
        return name;
    }

    public boolean isChild(){
        return (age >= 0 && age <= 16);
    }

    public boolean isStudent(){
        return student;
    }
}

isStudent()方法中,您只需返回布尔成员student

答案 2 :(得分:0)

鉴于年龄不应为负,我建议在构造函数中验证。您的实例变量应该只表示实例的状态;可以推导出顾客是否是孩子等事物。

我在下面建议的代码中提出了一些风格建议:

public class Customer {
    private final static int MAX_CHILD_AGE = 16;

    private final String name;
    private final int age;
    private boolean student;

    public Customer(String name, int age) {
        if (age < 0)
            throw new IllegalArgumentException("Age is negative");
        this.name = name;
        this.age = age;
        this.student = false;
    }

    public boolean isChild() {
        return age <= MAX_CHILD_AGE;
    }

    public void setStudent(boolean student) {
        this.student = student;
    }

    public boolean isStudent() {
        return student;
    }
}

我已将名称和年龄字段声明为最终字段。我希望您最终需要更改方法,此时您需要删除final关键字。

我还从构造函数中取出student参数。这只是一个建议:包括它肯定是有效的。我个人的理念是构造函数应该只包含final字段的参数。如果它有一个setter方法,那么在构造函数之后使用它。如果类需要复杂的构造函数,那么使用“构建器”而不是许多构造函数参数。