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
.
因为无论用户做什么,我们都需要产生一个提示,方法的最后一部分创建一个hiddenWord
的char
,并循环遍历[=中的每个字符15=],如果 guesses
中没有匹配的猜测,它会用 *
字符更新该位置的字符。
然后 returns String
表示 char
数组。
做类似...
System.out.println(applyGuess('n'));
System.out.println(applyGuess('a'));
System.out.println(applyGuess('b'));
产出
**n*n*
*anana
banana
例如
我的 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
.
因为无论用户做什么,我们都需要产生一个提示,方法的最后一部分创建一个hiddenWord
的char
,并循环遍历[=中的每个字符15=],如果 guesses
中没有匹配的猜测,它会用 *
字符更新该位置的字符。
然后 returns String
表示 char
数组。
做类似...
System.out.println(applyGuess('n'));
System.out.println(applyGuess('a'));
System.out.println(applyGuess('b'));
产出
**n*n*
*anana
banana
例如