-3

我正在制作一个简单的游戏,其中一名玩家选择单词,而另一名玩家必须在任意次数的尝试中猜测该单词。

public class JavaHang

{

//Data Members
private String secretWord;
private StringBuffer blankGuess;

//Constructor
public JavaHang(String s)
{
    secretWord = s;
    StringBuffer blankGuess = new StringBuffer( secretWord );
}
public void setBlankGuess()
{
    for(int i = 0;i<secretWord.length();i++)
    {
        blankGuess.setCharAt(i, '_');
    }
}

我有更多的东西,但我相信我的错误的位置。我得到一个 NullPointerException。“Stringbuffer blankGuess”的值怎么会有空值呢?

4

2 回答 2

4

你得到了一个 NPE,因为你已经blankGuess在方法中第二次声明了,因此你正在隐藏/隐藏你认为你正在使用的那个(在类中声明为一个字段的那个)。

改变:

StringBuffer blankGuess = new StringBuffer( secretWord );

至:

blankGuess = new StringBuffer( secretWord );
于 2013-01-07T23:50:40.647 回答
3
public JavaHang(String s)
{
    secretWord = s;
    StringBuffer blankGuess = new StringBuffer( secretWord );
}

blankGuess是在构造函数中声明和初始化的局部变量,我很确定您使用的是未初始化的实例变量,并且调用字符串缓冲区方法会导致NullpointerException. 您只需初始化实例变量blankGuess,如下所示。

 public JavaHang(String s)
    {
        secretWord = s;
         blankGuess = new StringBuffer( secretWord );
    }
于 2013-01-07T23:50:20.710 回答