有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何更改子字符串的值?

我正在尝试制作一个经典的hangman程序(GUI很好,没有问题),用户可以一次猜一个字母。问题是,当用户猜到一个字母时,它会用猜到的字母替换“”的位置(如果字母在单词中),但当猜到下一个字母时,它会忘记最后一次猜到的字母,位置会回到“”。抱歉,如果不清楚的话,这里有一个例子

Word is tiger,  
user guesses "g",  
outputs _ _ g _ _,  
user guesses "r",  
outputs _ _ _ _ r.

我希望代码如何工作:

Word is tiger,  
user guesses "g",  
outputs _ _ g _ _,  
user guesses "r",  
outputs _ _ g _ r.

我怎样才能做到这一点?请记住,tiger只是一个示例单词,单词是从数组中随机抽取的。我认为唯一的方法是改变空格中子字符串的值,但我不知道怎么做。到目前为止,用户从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
}

共 (1) 个答案

  1. # 1 楼答案

    当一个单词多次包含一个字母时,你需要考虑你想做什么:

    guessedSoFar = reveal(guessedSoFar, randWord, guessedLetter);
    
    private String reveal(String guessedSoFar, String randWord, char letter) {
    
        String newString = "";
    
        for (int i = 0 ; i < randWord.length(); i++) {
            if (randWord.charAt(i) == letter && guessedSoFar.charAt(i) == '_')
                newString += randWord.charAt(i);
            else 
                newString += guessedSoFar.charAt(i);
        }
    
        return newString;
    }