“null”逻辑错误 - Java

时间:2013-10-05 17:09:24

标签: java null logic

嗨,所以我在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;
    }

我已经尝试了几种不同的方法来完成这个程序,并且产生最佳结果的方法是这一个......事实是,我们只应该使用两个实例字段max。它似乎是null,因为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提出解决方案吗?请记住,我只能使用两个实例字段,谢谢。

2 个答案:

答案 0 :(得分:0)

您必须使用空字符串初始化body变量。否则,它被初始化为null,因此您无法在函数addLine()

中添加任何内容。

答案 1 :(得分:0)

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

另请考虑使用StringBuilder。当你需要进行多次连接时,这通常比+更好。

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

在构造函数中,您可以像以下字母一样开头:

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

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