首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >字符串在追加时返回null

字符串在追加时返回null
EN

Stack Overflow用户
提问于 2016-10-19 17:26:15
回答 2查看 129关注 0票数 2

我的任务是创造一个猜字游戏。你只有5次试着猜这个词。用户一次输入一个字母,试图找出我的秘密单词“果汁”,但你应该使用一个提示词结构,如果正确的话,每个猜测用正确的字母替换星号。

--这是输出应该是什么样子:

欢迎来到猜字游戏!你有5次试着猜这个秘密词!当前的提示是

猜小写字母

使用

*u*

猜这个秘密词

小管

继续努力!

猜小写字母

T

*u*

猜这个秘密词

突变体

继续努力!

..。继续到5次,然后你要么赢要么输。

,我的输出不允许您一直猜测,提示词显然是混乱的,因为它有5个星号的空前。我不知道怎么修好它。

当前的提示是 空* 猜小写字母 J 杰尔* 猜这个秘密词 朱特 继续努力! 游戏结束!再试试?

,这是我的课:

代码语言:javascript
复制
public class SecretWord {
private String secretWord;
private String hintWord;
private int numberOfTurns;

//Default Constructors
public SecretWord()
{
    this.secretWord = "juice";
    for (int i = 0; i < secretWord.length(); i++)
    {
        this.hintWord+="*";
    }
    this.numberOfTurns = 0;
}
//Accessors
public String getSecretWord()
{
    return this.secretWord;
}
public String getHintWord()
{
    return this.hintWord;
}
public int getNumberOfTurns()
{
    return this.numberOfTurns;
}
//Mutators
public void setSecretWord ()
{
    this.secretWord = "juice";
}
public void setHintWord ()
{
    char[] correctLetters = new char[secretWord.length()];
    for (int i = 0; i<secretWord.length();i++)
    {
        hintWord+="*";
        correctLetters[i] += '*';
    }
}
public void setNumberOfTurns (int i)
{
    this.numberOfTurns = 5;
}
//Methods
public void guessLetter(char guess)
{
    String tempHintWord="";
    for (int i = 0; i < secretWord.length(); i++)
    {
        if (secretWord.charAt(i) == guess)
        {
            tempHintWord += guess;
        }
        else
        {
            tempHintWord += hintWord.charAt(i);
        }
    }
    hintWord = tempHintWord;
}

,这是我的驱动程序类:

代码语言:javascript
复制
public class SecretWordGame {

//Constant for number of tries
public static final int NUM_TRIES = 5;

public static void main (String[] args)
{
    Scanner keyboard = new Scanner(System.in);

    //Starts game
    boolean quit = false;
    while (quit == false)

    {
        System.out.println("Welcome to the word guessing game! You have " +
                +NUM_TRIES+" tries to guess the secret word!");

                SecretWord myWord = new SecretWord();
        System.out.println("The current hint is \n"+myWord.getHintWord());

        while (myWord.getNumberOfTurns() <NUM_TRIES)
        {
            System.out.println("Guess a lowercase letter");

            //Gets the first letter of what is entered

            char guess = keyboard.nextLine().charAt(0);

            //Updates the hint by calling guess letter method

            myWord.guessLetter(guess);

            System.out.println(myWord.getHintWord());

            System.out.println("Guess the secret word");

            String myGuess = keyboard.nextLine();
            //Checks correct guess
            if (myGuess.equals(myWord.getSecretWord()))
            {
                System.out.println("You win!");
                break;
            }
            else
            {
                System.out.println("Keep trying!");
            }

            myWord.setNumberOfTurns(myWord.getNumberOfTurns()+1);
        }
        //Prompts user to play again

        System.out.println("Game over! Try again?");

        String userInput = keyboard.nextLine();
        if(userInput.equalsIgnoreCase("no"))
        {
            quit = true;
        }
        else
        {
            System.out.println("Let's go again!");
        }
    }
    System.out.println("Goodbye!");
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-10-19 17:29:15

默认情况下,SecretWordhintword被初始化为null。因此,当您附加+= "*"时,它会将当前值转换为"null",然后添加"*"。如果初始化向""声明的隐藏词,它将修复该问题。

票数 10
EN

Stack Overflow用户

发布于 2016-10-19 17:44:53

SecretWord类中,不初始化hintWord

因此,在执行hintWord += "*";时,hintWord是null,然后隐式地转换为字符串"null""*".*连接。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40137882

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档