基础Java Hangman游戏

3

我刚开始学习Java,这是我接触的第一种编程语言。

老师让我们使用while和for循环制作一个基本的Hangman游戏。

我的代码如下

当用户输入第一个猜测字符时,程序确实识别出了所猜测的字符,但仅在继续进行并声明我猜错字母!

非常感谢您的帮助!我的问题是,我的代码有什么问题?我需要程序告诉用户他的猜测是否正确。

我的代码:

import cs1.Keyboard;

public class Hangman {
    public static void main(String args[]) {
        int guessCount = 0;
        int correctGuess = 0;
        boolean foundIt;
        boolean solved;
        char guess, answer;
        String word;
            
        System.out.println("Welcome to HangMan!");
        System.out.println("Please enter a word for the opponent to guess!");
        word = Keyboard.readString();
        while (guessCount <= 6) {
            System.out.println("Please enter any letter A-Z as your guess!");
            guess = Keyboard.readChar();
            for (int i = 0; i < word.length(); i++) {
                if (guess == word.charAt(i)) {
                    System.out.println("You have guessed a correct letter!");
                    correctGuess++;
                    System.out.println("Correct Guess Count: "
                                        + correctGuess);
                    solved = false;
                }
                else if (guess != word.charAt(i)) {
                    System.out.println("Sorry! That is an incorrect guess! " 
                                       + "Please try again!");
                    guessCount++;
                    System.out.println("Guess Count: " + guessCount);
                    solved = false;
                }
            }
            if (correctGuess == word.length()) {
                solved = true;
                System.out.println("Congratulations! " + 
                                   "You have guessed the word!");
            }                   
        }
    }
}

这是我目前的进展,以下是输出结果。
Welcome to HangMan!
Please enter a word for the opponent to guess!
hello
Please enter any letter A-Z as your guess!
l
Sorry! That is an incorrect guess! Please try again!
Guess Count: 1
Sorry! That is an incorrect guess! Please try again!
Guess Count: 2
You have guessed a correct letter!
Correct Guess Count: 1
You have guessed a correct letter!
Correct Guess Count: 2
Sorry! That is an incorrect guess! Please try again!
Guess Count: 3
Please enter any letter A-Z as your guess!

1
好的,你有什么问题? - Dawood ibn Kareem
我的问题是我在代码中做错了什么?我需要程序告诉用户他的猜测是对还是错,而不仅仅是输出所有那些废话。我已经研究了charAt,确保我使用它是正确的,我认为我是正确的。 - Nic LaQuatra
2个回答

3

您需要将guessString中的每个字符进行比较,并且为每个匹配的字符显示一条消息。相反,您应该编写一个方法来返回匹配输入的字符计数(这也处理具有重复字母的单词)。所以,

private static int countOf(String in, char ch) {
    int count = 0;
    for (char c : in.toCharArray()) {
        if (c == ch) {
            count++;
        }
    }
    return count;
}

然后您可以像这样调用它:
guess = Keyboard.readChar();
int count = countOf(word, guess);
if (count > 0) {
  System.out.println("You have guessed a correct letter!");
  correctGuess += count;
} else {
  System.out.println("Sorry! That is an inncorrect guess! Please try again!");
}
guessCount++;

编辑 如果您不想使用第二种方法,可以使用以下方法:

guess = Keyboard.readChar();
int count = 0;
for (char c : in.toCharArray()) {
    if (c == guess) {
        count++;
    }
}
if (count > 0) {
  System.out.println("You have guessed a correct letter!");
  correctGuess += count;
} else {
  System.out.println("Sorry! That is an inncorrect guess! Please try again!");
}
guessCount++;

而且,由于您尚未使用for-each循环语句 -

char[] chars = in.toCharArray();
for (int i = 0; i < chars.length; i++) {
    if (chars[i] == guess) {
        count++;
    }
}

看起来我还没有学过你创建一个全新方法的部分!这似乎是一种我以前从未使用过的不同类型的for循环。我会尝试融入并学习它!谢谢! - Nic LaQuatra
你实际上不需要一个全新的方法。你应该能够使用一个循环来完成它,这个循环嵌套在你的主循环内部。你需要计算匹配输入字母的单词中有多少个字母,如果没有任何匹配,则打印“错误猜测”的消息。 - Dawood ibn Kareem
太好了!我刚查了一下 toCharArray,它非常有用,而且更加合理!现在唯一的问题是 sasy ch 无法解析为变量。不确定这是否只是你添加的填充内容,还是我漏掉了什么 :/ - Nic LaQuatra
@NicLaQuatra 编辑。是的,应该是“guess”。 - Elliott Frisch

-1
每次你完成一个响应后,需要询问用户输入以更新循环。
在循环内部,你从未更新变量猜测,这就是为什么它陷入无限循环的原因。你也必须在循环内部更新猜测变量。

编辑:最简单的方法是在循环中再次要求用户输入,直到他们完全猜对单词为止。 - Ryan Fung
那需要更多的for循环吗? - Nic LaQuatra

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接