2017-03-01 79 views
0

按照慣例我想說明我是一個起步者,如果我不使用正確的術語,請提前抱歉。爲什麼我的代碼在java中輸出[email protected]?

我做了什麼:

我創建的輸出從主一個單獨的類配方的方法。在主類中,我創建了一個對象來調用另一個類的方法。

從主:

Breakfast recipeName2 = new Breakfast(); 
recipeName2.frenchToast(); 
System.out.println(recipeName2); 

從其他類:

public void frenchToast(){ 

     System.out.println("\n"); 
     StringBuilder sba = new StringBuilder("For French toast you will need:\n "); 

     sba.append("Eggs\n "); 
     sba.append("Bread\n "); 
     sba.append("Cinnamon\n "); 
     sba.append("Vanilla "); 

     System.out.println(sba.toString()); 

    } 

} 

問題:

以爲配方正確輸出,由於某種原因,在它的盡頭,這是也加入:成分[email protected]

我不確定它是什麼或如何擺脫它。我嘗試以不同的方式改變我的代碼,例如改變我在參數system.out.ln()中放入的內容,但是這樣會混淆我的代碼。我有一種預感,這是因爲某些東西正在通過別的東西傳遞的方式,但我試圖改變我編寫代碼的方式,無濟於事。

如果有人能幫助我,我將非常感激。自從我的代碼在技術上起作用後,我會繼續執行我的項目,但是我被這個難住了,並且很想知道爲什麼會發生這種情況。

感謝

+0

執行'System.out.println(recipeName2);'時,你會發生什麼?爲什麼? –

+0

只需刪除一行「System.out.println(recipeName2);」 它輸出對象參考「[email protected]」 – keil

回答

1

你的錯誤是因爲該行System.out.println(recipeName2);下面我已經展示瞭如何在frenchToast()frenchToast2()分別同時使用無效或字符串:

class Main { 
    public static void main(String[] args) { 
    Breakfast recipes = new Breakfast(); 
    recipes.frenchToast(); 
    System.out.println(recipes.frenchToast2()); 
    } 
} 

class Breakfast { 
    public void frenchToast(){ 
    StringBuilder sba = new StringBuilder("For French toast you will need:\n "); 
    sba.append("Eggs\n "); 
    sba.append("Bread\n "); 
    sba.append("Cinnamon\n "); 
    sba.append("Vanilla "); 
    System.out.println(sba.toString()); 
    } 

    public static String frenchToast2(){ 
    StringBuilder sba = new StringBuilder("For French toast you will need:\n "); 
    sba.append("Eggs\n "); 
    sba.append("Bread\n "); 
    sba.append("Cinnamon\n "); 
    sba.append("Vanilla "); 
    return(sba.toString()); 
    } 
} 

等效輸出:

For French toast you will need: 
Eggs 
Bread 
Cinnamon 
Vanilla 
For French toast you will need: 
Eggs 
Bread 
Cinnamon 
Vanilla 

試試吧here!

0

你的早餐類不會覆蓋toString()方法。因此,當您打印早餐對象時,它將使用Object::toString方法,該方法將打印'在Java堆中位置標識符'。

回顧一下你的對象模型會更好一些,但是對於你來說簡單的修復就是使FrenchToast成爲一個延長早餐的類(或者如果你使早餐成爲一個接口就實現),然後把字符串放到toString方法。

像這樣:

public interface Breakfast {} 

public class FrenchToast implements Breakfast { 

    @Override 
    public String toString() { 
     StringBuilder sba = new StringBuilder("For French toast you will need:\n "); 
     sba.append("Eggs\n "); 
     sba.append("Bread\n "); 
     sba.append("Cinnamon\n "); 
     sba.append("Vanilla "); 

     return sba.toString(); 
    } 
} 
相關問題