Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 刽子手没有正常工作_Java_Append_Character Arrays - Fatal编程技术网

Java 刽子手没有正常工作

Java 刽子手没有正常工作,java,append,character-arrays,Java,Append,Character Arrays,我的applyGuess方法在每次猜测后返回用户的进度,如果他的猜测(在本例中是一个字母)在里面,我将它(+=)添加到进度中,所有即将猜测的字母都用“*”(星星)表示并打印在屏幕上。例如,用户猜测“a”,单词有两个aa***a*(输出),对于第二次猜测,让我们选择字母“n”,如果用户猜测“n”,我们得到*n****而不是 a**a* 谢谢 如果字母等于字母猜测,则输出似乎只显示一个字母而不是一个*。在第二个示例中,您传递了一个不等于“a”的“n”,因此它使其成为一个*覆盖旧字符串。这个问题可以通

我的applyGuess方法在每次猜测后返回用户的进度,如果他的猜测(在本例中是一个字母)在里面,我将它(+=)添加到进度中,所有即将猜测的字母都用“*”(星星)表示并打印在屏幕上。例如,用户猜测“a”,单词有两个aa***a*(输出),对于第二次猜测,让我们选择字母“n”,如果用户猜测“n”,我们得到*n****而不是

a**a*


谢谢

如果
字母
等于
字母猜测
,则输出似乎只显示一个字母而不是一个*。在第二个示例中,您传递了一个不等于“a”的“n”,因此它使其成为一个*覆盖旧字符串。

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

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;
}
Set previousGuesses=new HashSet();
公共字符串applyGuess(猜字符){
布尔值IsleterInSide=hiddenWord.indexOf(字母猜测)>=0;
字符显示;
串进程;
if(isLetterInside){
先前猜测。添加(字母猜测);
for(字符字母:hiddenWord.toCharArray()){
显示='*';
if(先前的猜测包含(字母)){
显示=字母;
}
进度+=显示;
}
}否则{
misses++;
}
返回进度;
}

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

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);
}
输出

**n*n*
*anana
banana

例如

您需要某种方法来维护用户先前已经猜到的内容。如果将他的猜测放入私有成员变量并返回该变量,您是否可以执行此操作?THX您在哪里保存以前猜到的字符的记录?@niyasc我没有保存任何记录,我应该将所有命中的字符存储在一个变量中吗?另一件事,可能是打字错误。您将布尔变量声明为
isLetterInside
,之后它被称为
letterInside
System.out.println(applyGuess('n'));
System.out.println(applyGuess('a'));
System.out.println(applyGuess('b'));
**n*n*
*anana
banana