Java 打印对象中的值

Java 打印对象中的值,java,object,Java,Object,我做了一个玛格丽塔比萨饼。我想让它储存一些价值,比如一些配料和它的成本。我试图打印出这些值,但是我得到了null值 然而,我注意到,如果我删除marg.setCost并只使用setCost,它就会按我所希望的那样工作。但是我想如果我创建了一个marg对象,我应该保留marg对象中的值。我喝了很多咖啡,但我很困惑:(我不确定这是否与您的代码完全匹配,但它是否确实符合您的要求 public void makePizza(){ String pizza = margherita; } 这不是

我做了一个玛格丽塔比萨饼。我想让它储存一些价值,比如一些配料和它的成本。我试图打印出这些值,但是我得到了
null


然而,我注意到,如果我删除marg.setCost并只使用setCost,它就会按我所希望的那样工作。但是我想如果我创建了一个marg对象,我应该保留marg对象中的值。我喝了很多咖啡,但我很困惑:(

我不确定这是否与您的代码完全匹配,但它是否确实符合您的要求

public void makePizza(){
    String pizza = margherita;
}
这不是字符串,因此为变量pizza分配了空值。请尝试将其括在引号中,如

String pizza = "margherita";
你的问题是:

    public void makePizza(){
        String pizza = margherita;

        if( pizza.equalsIgnoreCase("margherita")){
            setPizza("margherita");
            margherita();
        }
    }

注意对
margerita()的单独调用
-这意味着您正在创建一个单独的Pizza对象,然后将其丢弃。设置Pizza属性后,您仍然可以访问该属性,但其他属性从未设置。您需要显式调用各种设置方法,以便存储当前正在使用的Pizza的配料。

在函数m中argharita您正在创建另一个pizzamenu并设置该对象的属性。您尚未设置原始对象的属性。因此您将获得null。但您需要设置“this”对象的属性。更改以下函数:

public void margherita(){

        setIngredient1( "tomato" );
        setIngredient2( "basil" );
        setIngredient3( "mozzerella" );
        setCost( 5.7 );
        etBase( "thin" );

    }
可能是因为您实例化了PizzaMenu对象类两次……”new PizzaMenu() 一个是主方法,一个是玛格丽塔()方法

如果这是您希望处理代码的方式..您可以为对象类PizzaMenu创建重载构造函数,该构造函数将再次设置值

例如

PizzaMenu(String ingredient, String ingredient2, ..etc..){
/*Do the setters here..*/
}

但实际上这不是一个好的编程构造…希望它能有所帮助我认为这是范围问题。在
margerita()
中,您正在创建新的obj。但是在
print()
中,您正在调用当前的obj值。这些值设置为new obj
marg
。因此,请尝试打印

public void print(){
System.out.println( String.format( "Good choice! You picked the " + "%s", getPizza() ));
System.out.println( String.format( "The " + "%s" + " is made with " + "%s" + ", " + "%s" + " and " + "%s", marg.getPizza(), marg.getIngredient1(),marg.getIngredient2(), marg.getIngredient3() ) );
System.out.println( String.format( "And the price is a very reasonable £" + "%.2f", marg.getCost() ));   
}


可能marg obj对
print()
不可见。请尝试将than obj作为参数发送!

您现在仍在使用

public void margherita(){
PizzaMenu marg = new PizzaMenu();

marg.setIngredient1( "tomato" );
marg.setIngredient2( "basil" );
marg.setIngredient3( "mozzerella" );
marg.setCost( 5.7 );
marg.setBase( "thin" );
marg.setPizza("margherita");

}
但是你需要使用

public void margherita(){

setIngredient1( "tomato" );
setIngredient2( "basil" );
setIngredient3( "mozzerella" );
setCost( 5.7 );
setBase( "thin" );
setPizza("margherita");

}

这背后的原因是您正在创建新对象并为该对象赋值。因为这些数据成员不是静态的,所以它们不会更改您的obejct(u)值。

请向我们显示所有
getIngredientX()
setIngredientX()的代码
函数。为什么您的pizza的类型是string?它是string,因为我使用的是扫描仪中的字符串,我试图使它不那么复杂,而不是使用字符串pizza=whichPizza();它返回一个字符串,我只是把Margerita放在这里,但忘了把它放在引号里,对不起,我试过了,但由于对象是用另一种方法创建的,当我试图打印marg.getCost()时,它告诉我marg不能解析为类型/变量:(嗨,因为marg的作用域以Margerita()结尾).尝试在全局中声明marg或将marg Obj作为参数发送到打印函数..!告诉我一件事,从哪里调用打印函数??
public void margherita(){

setIngredient1( "tomato" );
setIngredient2( "basil" );
setIngredient3( "mozzerella" );
setCost( 5.7 );
setBase( "thin" );
setPizza("margherita");

}