Hangman 追加进度无法正常工作

Hangman append progress not working properly

我的 applyGuess 方法 returns 每次猜测后用户的进度,如果他猜测,在这种情况下是一个字母,在里面我将它附加 (+=) 到进度中,所有的字母很快就会猜测的结果用“*”(星号)表示并打印在屏幕上。例如,用户猜 'a' 并且单词有两个 a; a***a*(输出)并且,对于第二次猜测,如果用户猜测 'n',我们得到; *n**** 而不是

an**a*

  public String applyGuess(char letterGuessed){
    boolean isLetterInside = hiddenWord.indexOf(letterGuessed) >= 0; 
    char display;
    String progress;

    if (isLetterInside){
        for (char letter: hiddenWord.toCharArray()){
            display = '*';
            if (letter == letterGuessed){
                display = letterGuessed;
                }
            progress += display;
            }
    } else {
        misses++;
        }
    return progress;
}

谢谢!!

如果 letter 等于 letterGuessed,输出似乎只显示一个字母而不是 *。在你的第二个例子中,你传递了一个 "n" 其中不等于 "a" 所以它使它成为 * 覆盖旧字符串。

这个问题可以通过多种方式解决。一种可能的解决方案是:

Set<Character> previousGuesses = new HashSet<Character>();

public String applyGuess(char letterGuessed){
    boolean isLetterInside = hiddenWord.indexOf(letterGuessed) >= 0; 
    char display;
    String progress;

    if (isLetterInside){
    previousGuesses.add(letterGuessed);
        for (char letter: hiddenWord.toCharArray()){
            display = '*';
            if (previousGuessess.contains(letter)){
                display = letter;
                }
            progress += display;
            }
    } else {
        misses++;
        }
    return progress;
}

您可以做的是跟踪用户所做的所有猜测,并在每次连续猜测时构建一个新提示。

private String hiddenWord = "banana";
private Set<Character> guesses = new HashSet<>();
private int misses;


public String applyGuess(char letterGuessed) {
    if (!guesses.contains(letterGuessed)) {
        guesses.add(letterGuessed);
        if (!hiddenWord.contains(Character.toString(letterGuessed))) {
            misses++;
        }
    }
    char[] progress = hiddenWord.toCharArray();
    for (int index = 0; index < hiddenWord.length(); index++) {
        if (!guesses.contains(hiddenWord.charAt(index))) {
            progress[index] = '*';
        }
    }
    return new String(progress);
}

这基本上是检查用户是否已经使用过这个字符(我这样做是为了不增加 misses 计数,但您的要求可能会有所不同) ,将 char 添加到猜测列表,然后检查字符是否在 hiddenWord 中,如果不在,则递增 misses.

因为无论用户做什么,我们都需要产生一个提示,方法的最后一部分创建一个hiddenWordchar,并循环遍历[=中的每个字符15=],如果 guesses 中没有匹配的猜测,它会用 * 字符更新该位置的字符。

然后 returns String 表示 char 数组。

做类似...

System.out.println(applyGuess('n'));
System.out.println(applyGuess('a'));
System.out.println(applyGuess('b'));

产出

**n*n*
*anana
banana

例如