我的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;
}
谢谢!
答案 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
例如