2013-10-05 93 views
0

嗨,所以我在Java方面比較新,我有大約2個月的經驗,所以請嘗試使用與我的學習級別相關的術語和代碼來回答我的問題。「null」邏輯錯誤 - Java

所以,我必須讓學校一個程序,使一個字母,裝修的格式如下:

Dear recipient name: 

blank line 

first line of the body 

second line of the body 

. . . 

last line of the body 

blank line 

Sincerely, 

blank line 

sender name 

我的代碼看起來是這樣的:

private String body; 
    private String letter; 

    public Letter(String from, String to) 
    { 
     letter = ("Dear " + to + ":" + "\n" + "\n" + body + "\n" + "Sincerely," + "\n" + "\n" + from); 
     body = ""; 
    } 

    public void addLine(String line) 
    { 
     body = body + line + "\n"; 
    } 

    public String getText() 
    { 
     return letter; 
    } 

香港專業教育學院嘗試了幾種不同的方法來完成這個程序,產生最好結果的就是這一個。事情是,我們只應該使用兩個實例字段max。看起來它是空的,因爲body沒有在我的構造函數中給出值。還有一個程序測試類,看起來像這樣:

public class LetterTester 

{ 

    public static void main(String [] args) 

    { 

     Letter tyler = new Letter("Mary", "John"); 

     tyler.addLine("I am sorry we must part."); 

     tyler.addLine("I wish you all the best."); 

     System.out.println(tyler.getText()); 

    } 

} 

我跳過所有默認的東西,一些括號和世界上沒有語法錯誤,但是當我運行測試類,我得到:

Dear John: 

null 
Sincerely, 

Mary 

我做錯了什麼,有人可以給一個解決方案,如何擺脫空?請記住,我只能使用兩個實例字段,謝謝。

+0

'body = body;'在你的構造函數中! – Sage

回答

0

bodynull因爲這是參考字段的默認值,不能附加任何字符串。您可以將其初始化爲空字符串body = ""。這將適用於您的addLine()代碼。您還應該將構造函數的內容構建到getText()。在構造函數中,所需的數據尚不可用。

也可以考慮使用StringBuilder。當你需要進行幾個連接時,通常比+更好。

編輯:(由OP一個澄清評論後,自己讀書的問題越好)

在構造函數中,你可以開始像字母:

body = "Dear " + to + ":" + "\n\n"; 
sender = from; 

這裏我做sender一個領域。您不需要letter字段,因此您仍然可以保持最大2個字段的限制。

+0

是的,但在getText中,我無法使用構造函數中的to和from參數變量,這是我的問題。 – Crazykid0416

+0

@ Crazykid0416你不需要在任何地方存儲'to'變量,因爲它只是在開始時才需要。所以你可以簡單地將它添加到你的初始'body'中。 (或者'StringBuilder')。所以你需要的唯一領域就是存儲'from'和這封信的內容。 – kiheru

+0

所以我的實例字段應該是代表整個字母的東西,而一個變量代表從? – Crazykid0416

0

您必須用空字符串初始化body變量。否則,其作爲null初始化,從而爲你在函數進行addLine()

+0

我試過這樣做,將body = body替換爲body =「」並且沒有任何效果,它會給出相同的空結果。 – Crazykid0416