Cod*_*nja 0 java string replace substring
我正在尝试制作一个经典的hangman程序(GUI很好,没问题),用户一次猜出一个字母.问题是,当用户猜到一个字母时,它会用猜到的字母替换"_"的位置(如果字母在单词中),但是当猜到下一个字母时,它会忘记最后一个猜测,并且地方回到"_".对不起,如果不清楚,这是一个例子
Word is tiger,
user guesses "g",
outputs _ _ g _ _,
user guesses "r",
outputs _ _ _ _ r.
Run Code Online (Sandbox Code Playgroud)
我希望代码如何工作:
Word is tiger,
user guesses "g",
outputs _ _ g _ _,
user guesses "r",
outputs _ _ g _ r.
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?请记住,老虎只是一个例子,单词是从数组中随机抽取的.我认为唯一的方法是在空格中更改子字符串的值,但我不知道如何做到这一点.截至目前,用户猜出GUI窗口中的字母(男人本人所在的位置)并通过按下按钮提交答案.输出现在只打印在控制台上.
这是该计划的麻烦部分:
// guess is the name of JTextPane next to button
// randWord is the word pulled randomly from an array
private void guessLetter() {
guessedLetter = guess.getText();
if (randWord.contains(guessedLetter)){
reveal(); // method below
} else {
wrongGuesses++; // when wrongGuesses adds,
update(); // another body part is added, method not below
}
}
private void reveal() {
int start = randWord.indexOf(guessedLetter); //gets the index of the letter guessed
String print = blanks.substring(0, start) + guessedLetter + blanks.substring(start+1); //reveals the letter
System.out.println(print);//prints the revealed letter in correct spot
}
Run Code Online (Sandbox Code Playgroud)
解决这个问题的一种方法是维护一个StringBuilder在每次猜测字母时都会更新的对象.
String wordToGuess = "tiger";
StringBuilder wordToShow = new StringBuilder();
for (int i=0; i < wordToGuess.length(); ++i) {
wordToShow.append("_");
}
// update publicly shown string; return true if one or more matches found,
// otherwise return false
public boolean guessLetter(char letter) {
boolean result = false;
for (int i=0; i < wordToGuess.length(); ++i) {
if (wordToGuess.charAt(i) == letter) {
// reveal the correctly guessed character
wordToShow.setCharAt(i, letter);
result = true;
}
}
return result;
}
public String reveal() {
return wordToShow.toString();
}
Run Code Online (Sandbox Code Playgroud)