【问题标题】:How do you implement an enum in an object class - Java?您如何在对象类中实现枚举 - Java?
【发布时间】:2018-02-05 17:03:04
【问题描述】:

这是我第一次在课堂上使用枚举。我想创建一个 Pizza 类,以便用户可以创建一个 Pizza 对象,然后设置大小、获取大小、设置奶酪数量等。Pizza() 是初始化不带参数的 Pizza 对象的默认构造函数。谢谢!!

package PizzaPackage;

public class Pizza {
private enum PizzaSize {
    small, medium, large }
protected int numcheese;
protected int numpep;
protected int numham;

Pizza(){
     PizzaSize newpizza= PizzaSize.medium; //Is this correct?
     numcheese = 1;
     numpep =0;
     numham=0;
}
public int getnumcheese() {
    return this.numcheese;

}

public int getnumpep() {
    return this.numpep;
}

public int getnumham() {
    return this.numham;
}

public void setSize(PizzaSize newpizza){
    //???

}
public PizzaSize getSize(){
    //???
}
}

【问题讨论】:

标签: java class object enums constructor


【解决方案1】:

不完全是。

PizzaSize 是一个枚举,你已经正确地声明了。

但是,您将 PizzaSize 枚举误认为是为任何特定的 Pizza 实例保存此值的实例成员。

您应该创建一个额外的私有成员变量,称为private pizzaSize,并且您的构造函数应该这样做

this.pizzaSize = PizzaSize.medium;

然后,在您的 getSize() 方法中,您应该返回 this.pizzaSize;

此外,您的setSize(PizzaSize newpizza) 应包含this.pizzaSize = newpizza

【讨论】:

    【解决方案2】:

    虽然您已经创建了 Enum,但您忘记将它作为实例成员,就像您的其他实例成员 numcheesenumpep 等一样。

    PizzaSize newpizza;
    

    将其声明为成员并使用它。

    package PizzaPackage;
    
    public class Pizza {
    private enum PizzaSize {
        small, medium, large }
    protected int numcheese;
    protected int numpep;
    protected int numham;
    PizzaSize newpizza;
    
    Pizza(){
         newpizza= PizzaSize.medium; //Is this correct?
         numcheese = 1;
         numpep =0;
         numham=0;
    }
    public int getnumcheese() {
        return this.numcheese;
    
    }
    
    public int getnumpep() {
        return this.numpep;
    }
    
    public int getnumham() {
        return this.numham;
    }
    
    public void setSize(PizzaSize newpizza){
        this.PizzaSize newpizza = newpizza;
    
    }
    public PizzaSize getSize(){
        return newpizza;
    }
    }
    

    //这样对吗?

    Pizza(){
         PizzaSize newpizza= PizzaSize.medium; //Is this correct?
         numcheese = 1;
         numpep =0;
         numham=0;
    }
    

    不是真的。因为您将 PizzaSize 的范围仅限于此构造函数。 PizzaSize 类型的变量在构造函数之外不再可访问。

    【讨论】:

      【解决方案3】:

      有两种可能的解决方案:

      1. pizzasize 字段的类型更改为PizzaSize
      2. 使用ordinal枚举值方法:pizzasize = newpizza.ordinal(); - 它返回原始枚举中的枚举值索引。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-04-10
        • 2018-10-21
        • 1970-01-01
        • 2010-11-12
        • 2010-09-09
        • 2013-03-23
        • 1970-01-01
        相关资源
        最近更新 更多