打印对象内的值

时间:2013-12-12 03:19:39

标签: java object

我创造了一个玛格丽塔披萨。我希望它存储一些值,例如一些成分和成本。我正在尝试打印这些值,但我得到了null个值。

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

6 个答案:

答案 0 :(得分:1)

在函数margharita中,您正在创建另一个pizzamenu并设置该对象的属性。您尚未设置原始对象的属性。所以你得到null。但是你需要设置“this”对象的属性。更改以下功能:

public void margherita(){

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

    }

答案 1 :(得分:1)

现在你还在使用

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 )值。

答案 2 :(得分:0)

我不确定这是否与您的代码完全匹配,但是如果它确实是

public void makePizza(){
    String pizza = margherita;
}

这不是String,因此变量pizza被赋予空值。请尝试将其括在引号中,如

String pizza = "margherita";

答案 3 :(得分:0)

你的问题在这里:

    public void makePizza(){
        String pizza = margherita;

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

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

答案 4 :(得分:0)

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

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

}

public static void main(String[] args) {

   PizzaMenu u = new PizzaMenu();
   u.makePizza();
   u.print();
} 

也许是因为你实例化了PizzaMenu对象类两次......“新的PizzaMenu()” 一个在Main方法中,一个在margherita()方法中......

如果这是您想要处理代码的方式..您可以为对象类PizzaMenu创建一个重载的构造函数,它将再次设置值。

对于前。

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

但实际上这不是一个好的编程结构......希望它有所帮助

答案 5 :(得分:0)

我认为这是范围问题。在margherita()中,您正在创建新的对象。但是在print()中你正在调用当前的obj值。设置为新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() ));   

}

print()可能看不到marg obj。尝试发送比obj作为参数!