如果构造函数中的语句未按预期工作? Java

时间:2018-08-10 07:14:06

标签: java class if-statement constructor

这是我在父类中使用的构造函数:

    public Base(String breadType, String meat) {
    this.breadType = breadType;
    this.meat = meat;

    if(!this.breadType.equals("baguette")|| !this.breadType.equals("brown rye")) {
        this.additionalCost+= 1.99;
        System.out.println("Bread neither baguette or brown rye.");
    }
    if(!this.breadType.equals("beef") || !this.breadType.equals("low-fat meat")) {
        this.additionalCost+= 2.99;
        System.out.println("Meat neither beef or low-fat meat.");

    }


    this.finalCost = baseCost+additionalCost;

}

为了明确起见,我尝试创建的逻辑是检查输入是否为“长棍面包”或“棕色黑麦”。如果两者都不是,则additionalCost字段将增加1.99。对于输入的肉类类型,已经实现了类似的逻辑。

我有一个带有以下构造函数的子类:

    public Healthy_Burger() {
        super("brown rye","low-fat meat");
        //addCost(this.baseCost-super.getBaseCost());
    }

除非我对构造函数中的super()理解不正确,否则我会认为输入的参数将在基本构造函数“ Base”中传递,后跟if语句,然后检查面包或肉类不是它要查找的对象,如果不是,则应使用相应的值增加extraCost。

最终,我的问题是当我像这样实例化“ Healthy_Burger”时:

    Healthy_Burger burger = new Healthy_Burger();

我什至使用吸气剂来确保面包类型为“棕色黑麦”,但是我遇到的问题是,在检查最终成本时,我发现面包类型和肉类的附加成本都被添加了,即使它们并不是因为面包类型是“黑麦”而肉类是“低脂肉”,因此我的if语句不应返回true。

谢谢。

4 个答案:

答案 0 :(得分:6)

您要检查错误的变量breadType而不是meat,并使用错误的运算符||而不是&&

从以下位置更改第二个if

if (!this.breadType.equals("beef") || !this.breadType.equals("low-fat meat"))

收件人:

if (!this.meat.equals("beef") && !this.meat.equals("low-fat meat"))

答案 1 :(得分:2)

  

如果这两个都不是,则AdditionalCost字段将增加1.99。

您写了:

  $levels=Level::orderBy('id','asc')->where(['level_name'=>[level1,level2,level3]])->get();
    return view('markbook.show_level',compact('levels'));

这意味着:

  

如果不是法式面包或非黑麦,则extraCost字段将增加1.99。

您必须将if(!this.breadType.equals("baguette") || !this.breadType.equals("brown rye")) { (OR)替换为||(AND)。

所以条件应该是:

&&

答案 2 :(得分:1)

您应使用&&代替||,

    if(!this.breadType.equals("baguette")&& !this.breadType.equals("brown rye")) {
    this.additionalCost+= 1.99;
    System.out.println("Bread neither baguette or brown rye.");
}
if(!this.breadType.equals("beef") && !this.breadType.equals("low-fat meat")) {
    this.additionalCost+= 2.99;
    System.out.println("Meat neither beef or low-fat meat.");

}

答案 3 :(得分:0)

if(!this.breadType.equals("baguette") && !this.breadType.equals("brown rye")) {
        this.additionalCost+= 1.99;
        System.out.println("Bread neither baguette or brown rye.");
}

您的if语句对第一个参数返回true(因为它不等于法式面包),由于OR语句(||),它无论如何都会执行。 尝试使用AND(&&而不是OR,因为如果两种类型都不是,那么您只想添加成本。