0

嗨,我是编程新手,我们的任务是创建一个刽子手游戏。现在我遇到的问题是猜测。该程序猜测一切正确,并且工作正常。虽然它不会打印出 中的字母JTextField,或者它确实打印出 1 个字母,但是当我再次猜对时,前一个字母会被覆盖。

那么有没有友好的灵魂可以伸出援助之手?

这是我的检查代码:

  private class check implements ActionListener {
    public void actionPerformed(ActionEvent ae) {
        try {  
            // Grabs the letter from the guessField and converts it into a char which can be used to compare against the word.
         guess = guessField.getText();

        guessField.setText("");
        char guess2 = guess.charAt(0);


        String displaySecret = "";

        for (int i = 0; i < random.length(); i++)
            displaySecret += "*";


        //read in a guess
        int position = random.indexOf(guess2);
        //now position contains the index of guess inside secret, or
        //-1 if the guess was wrong

        String newDisplaySecret = "";
        for (int i = 0; i < random.length(); i++)
            if (i == position)
                newDisplaySecret += random.charAt(i); //newly guessed character
            else
                newDisplaySecret += displaySecret.charAt(i); //old state

        displaySecret = new String(newDisplaySecret);

        wordField.setText(displaySecret);

}

4

2 回答 2

0
wordField.setText(displaySecret);

wordField.setText(wordField.getText()+displaySecret);

认为世界字段内的代码用新的值替换了值,方法声明说set,它不是addText

于 2013-10-17T12:04:35.850 回答
0

您应该更改初始化显示密码的方式

String displaySecret = "";
    for (int i = 0; i < random.length(); i++)
        displaySecret += "*";

String displaySecret = wordField.getText();
if(displaySecret=NULL){/*case for fist execution*/
    displaySecret="";
    for (int i = 0; i < random.length(); i++)
    displaySecret += "*";
}

这将使您能够记住从一个猜测到另一个猜测的最后一个条目。如果您的 Label 已正确初始化,您可以删除整个 if 语句。

但是,您的代码还有另一个问题,即如果您的随机变量中有多次相同的字母出现,您只会找到第一个。

条件:

if(i=position)

应该

if (guess2 == random.charAt(i))
于 2013-10-17T12:45:53.710 回答