我需要检查用户输入的字母及其猜测的空格是否在隐藏单词的特定位置。

变量one等于用户猜测的空间索引。.letterGuess是他们猜测的字母。我的代码怎么错了?

示例:秘密词是你好

hidden word is ==  -----


用户猜测h 0 1 2 3
因此,它需要检查单词hello的索引0 1 2 3处的空格是否包含用户猜测的“ h”
如果是这样,则需要将-----替换为h----

                 String firstSpace = guessedSpaces.substring(0,1);
                String secondSpace = guessedSpaces.substring(2,3);
                String thirdSpace = guessedSpaces.substring(4,5);
                String fourthSpace = guessedSpaces.substring(6,7);

                int one = Integer.parseInt(firstSpace);


                int two = Integer.parseInt(secondSpace);
                int three = Integer.parseInt(thirdSpace);
                int four = Integer.parseInt(fourthSpace);



     (secretWord.charAt(one)==letterGuess)
     (secretWord.charAt(one)==letterGuess)
    (secretWord.charAt(one)==letterGuess)
    (secretWord.charAt(one)==letterGuess)

最佳答案

这是一个完整的hangman程序的简短代码:

static int MAX_MISSES = 5;
static String[] WORDS = { "QUICK", "BROWN", "JUMPS" }; // etc

public static void main(String[] args) throws Exception {
    String word = WORDS[new Random().nextInt(WORDS.length)], guesses = " ";
    int misses = -1;
    for (Scanner in = new Scanner(System.in); !word.matches("[" + guesses + "]+") & (misses += word.contains(guesses.substring(0, 1)) ? 0 : 1) <= MAX_MISSES; guesses = in.nextLine().toUpperCase().charAt(0) + guesses)
        System.out.println(word.replaceAll("(?<=.)", " ").replaceAll("[^" + guesses + "]", "_"));
    System.out.println(word + (misses > MAX_MISSES ? " not" : "") + " solved with " + misses + " incorrect guesses");
}


一些注意事项:


正则表达式用于检查解决方案并显示当前猜测状态
在循环终止中使用&代替&&来强制执行逻辑的两侧-因此始终正确更新未命中
已使用各种其他技巧来故意提高代码密度


没有错误检查输入。如果用户输入多个字母,则仅使用第一个字母。如果没有输入字母,它将爆炸。可以在不添加更多代码的情况下添加错误检查,但是for这行会很麻烦-我将其作为练习留给读者。

此外,也不会检查是否多次错误地猜测同一字母。使用此代码,如果您两次猜测正确的字母,则不会发生任何不良情况,但是,如果您两次猜测错误的字母,则将其视为单独的“未命中”,因此您将浪费一次机会。

09-15 14:23