0

こんにちは、私は Java の初心者です。約 2 か月の経験があります。私の学習レベルに関連する用語とコードを使用して質問に答えてください。

そのため、次の形式に適合する、学校向けの手紙を作成するプログラムを作成する必要があります。

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;
    }

このプログラムを実行するためにいくつかの方法を試しましたが、最良の結果が得られたのはこれです。コンストラクターで body に値が指定されていないため、null のようです。次のようなプログラム テスター クラスもあります。

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

私は何を間違っていますか? nullを取り除く方法について誰かが解決策を教えてください。2 つのインスタンス フィールドしか使用できないことに注意してください。

4

2 に答える 2

0

bodynullこれは、参照フィールドのデフォルト値であるためです。代わりに空の文字列に初期化できますbody = ""。それはあなたのaddLine()コードで動作します。また、コンテンツの構築をコンストラクタから に移動する必要がありますgetText()。コンストラクターでは、必要なデータがまだ利用できません。

StringBuilderの使用も検討してください。+これは通常、複数の連結を行う必要がある場合よりも適切な選択です。

編集:(OPによる明確なコメントの後、そして私自身が質問をよく読んだ後)

コンストラクターでは、次のように文字を開始できます。

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

ここにsender畑を作りました。フィールドは必要ないletterため、最大 2 フィールドの制限のままでかまいません。

于 2013-10-05T17:18:30.577 に答える
0

body空の文字列で変数を初期化する必要があります。それ以外の場合は として初期化されるnullため、関数で行っているように文字列に何も追加できませんaddLine()

于 2013-10-05T17:14:31.093 に答える