Basic Java Hangman

一笑奈何 提交于 2019-12-23 20:20:07

问题


Hey guys I am just starting to learn Java as my first programming language! In class we were assigned to make a basic Hangman game with the use of a while and for loops!

What I have so far

When the user inputs the first guess it does recognize that that characters that he/she guessed was corrected but just continues on and stating that I have guessed an incorrect letter!

Help would be very appreciated!! My question is what am I doing wrong in my code? I need the program to tell the user if his guess is right or wrong.

My code:

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!");
            }                   
        }
    }
}

This is what I have so far and here is the output

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:


You compare the guess to every character in the String and then display the message for every character. Instead, you should write a method that returns a count of characters that match the input (this also handles words that have repeats of letters). So,

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

Then you can call it like,

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++;

Edit To do it without a second method you could use,

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++;

And, since you haven't used the for-each -

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



回答2:


You need to ask user input every time you finish an response to update the loop.

Your variable guess was never updated inside the loop, that is why it is running into infinite loop. You have update the guess variable as well inside the loop.



来源:https://stackoverflow.com/questions/26269532/basic-java-hangman

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!