Hangman追加进度不正常

时间:2015-03-25 04:23:08

标签: java append character-arrays

我的applyGuess方法在每次猜测后返回用户的进度,如果他的猜测(在这种情况下是一个字母)在里面我追加它(+ =)来进行,并且所有即将被猜到的字母都是用' *'在屏幕上显示和打印(星星)。例如,用户猜到了' 这个词有两个a;' s; a *** a * (输出),如果用户猜到&#,则可以选择字母' n' 39; n' ,我们得到; * n ****而不是

  

一个** 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;
}

谢谢!

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

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;
}

答案 2 :(得分:0)

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

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

因为,无论用户做什么,我们都需要生成提示,方法的最后一部分会创建char的{​​{1}}并循环遍历{{1}中的每个字符},hiddenWord中没有匹配的猜测,它会使用hiddenWord字符更新该位置的字符。

然后返回guesses数组的*表示。

做类似......

的事情
String

输出

char

例如