这是我在父类中使用的构造函数:
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。
谢谢。
答案 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,因为如果两种类型都不是,那么您只想添加成本。