布尔值未使用构造函数初始化

时间:2019-07-13 21:02:07

标签: java

我创建了一个简单的系统来创建汉堡包,您可以在其中添加成分,然后根据所选择的成分来计算价格,基准价格是5(不含额外成分),对于每种成分,我将其值设置为是的,我有一个价格计数器,该计数器会将基本价格再增加1欧元/美元,这里的问题是布尔值字段不会被初始化为false,即使是我在Constructor类中进行了设置,我也无法了解原因。

我尝试将布尔字段设置为false,因为它们不在参数中,但是它们不会更改,在我提供的代码中,我希望价格为5,因为我尚未设置任何其他成分,因此该方法price()应该只返回我设置的基本价格(5),并且不添加任何其他成分,但这不会发生,因为所有布尔字段均设置为true,这意味着它们将为每个真实值加1,因此返回的价格为9。 问这个问题可能真的很愚蠢,但是我是一个完全编程的菜鸟,所以我要感谢是否有人能解释为什么我没有得到想要的结果。

public class Hamburger {
    private String bun;
    private String meat;
    private double price;
    private boolean letuce;
    private boolean tomato;
    private boolean bacon;
    private boolean sauce;

    public Hamburger(String bun, String meat) {
        this.bun = bun;
        this.meat = meat;
        this.price = 5;
        this.letuce = false;
        this.tomato = false;
        this.bacon = false;
        this.sauce = false;
    }

    public double price() {

        if(letuce = true)
            price+=1;
        if(tomato = true)
            price+=1;
        if(bacon = true)
            price+=1;
        if(sauce = true)
            price+=1;

        return price;           
    }

    public void setLetuce(boolean letuce) {
        this.letuce = letuce;
    }
    public void setTomato(boolean tomato) {
        this.tomato = tomato;
    }
    public void setBacon(boolean bacon) {
        this.bacon = bacon;
    }
    public void setSauce(boolean sauce) {
        this.sauce = sauce;
    }
}

我希望输出为5,但输出为9

2 个答案:

答案 0 :(得分:4)

在if检查中,您使用=而不是==。 单个=是一个分配,一个分配返回分配的值,在这种情况下,true就是代码返回9而不是5的原因 这将按预期工作:

public double price() {

    if(letuce == true)
        price+=1;
    if(tomato == true)
        price+=1;
    if(bacon == true)
        price+=1;
    if(sauce == true)
        price+=1;

    return price;           
}

答案 1 :(得分:0)

letuce = true

是一个赋值,将letuce的值更改为true,并且本身的值为true