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 一个值。还有一个程序测试器类,如下所示:

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给出解决方案吗?请记住,我只能使用两个实例字段,谢谢。

4

2 回答 2

0

您必须body使用空字符串初始化变量。否则将其初始化为null,因此您不能像在函数中那样将任何内容附加到字符串addLine()

于 2013-10-05T17:14:31.093 回答
0

bodynull因为这是参考字段的默认值。您可以将其初始化为空字符串body = ""。这将适用于您的addLine()代码。您还应该将构造内容从构造函数移至getText(). 在构造函数中,所需的数据尚不可用。

还可以考虑使用StringBuilder。这通常比+需要进行多个连接时更好的选择。

编辑:(在OP发表澄清评论后,我自己更好地阅读了这个问题)

在构造函数中,您可以像这样开始字母:

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

在这里我做sender了一个字段。您不需要该letter字段,因此您仍然可以保持最多 2 个字段的限制。

于 2013-10-05T17:18:30.577 回答