在java中创建简单的hangman程序,麻烦for循环

时间:2016-12-21 02:10:21

标签: java string loops

to_date

这里循环遍历String中的字符,并检查用户输入guessedLetter是否与字符串中的char匹配。现在循环循环遍历每个char,从字符串中的第一个字符开始到最后一个,用户必须猜测它们在字符串中排列的字母的确切顺序,我该如何解决这个问题,以便任何字符输入匹配a字符串中的字符是正确的,而不是字符必须按顺序?

public class Game {

public static void main(String[] args) {
String secretWord = "frog";

System.out.println("Word has " + secretWord.length() + " letters.");
System.out.println("Guess a letter: ");

int correctGuesses = 0;

int strikes = 5;

Scanner input = new Scanner(System.in);

while (strikes > 0) {

}

2 个答案:

答案 0 :(得分:0)

guessedLetter = input.next().charAt(0);

如果您想匹配整个UserInput,则不应该charAt(0)。 另一方面,如果你只想匹配任何角色,那么你第一次测试guessedLetter == currentLetter是真的,那么就退出程序。

顺便说一下,如果你喜欢,只需谷歌“KMP算法”来学习如何匹配String。

答案 1 :(得分:0)

您可以按以下方式尝试:

  1. 将secretWord的所有字符移动到地图上(键将是字符,值将是字符串中该字符的发生率)。

  2. 从键盘读取字符并进行交互(基本上是你的逻辑)。

  3. 这是代码。

    public static void main(String[] args) {
        String secretWord = "frog";
    
        Map<Character, Integer> mapOfLetters = new HashMap<>();
    
        for (char c : secretWord.toCharArray()) {
            int count = 1;
            if (mapOfLetters.containsKey(c)) {
                count = mapOfLetters.get(c) + 1;
            }
            mapOfLetters.put(c, count);
        }
    
        System.out.println("Word has " + secretWord.length() + " letters.");
        System.out.println("Guess a letter: ");
    
        int correctGuesses = 0;
    
        int strikes = 5;
    
        Scanner input = new Scanner(System.in);
    
        while (strikes > 0 && !mapOfLetters.isEmpty()) {
    
            char guessedLetter = input.next().charAt(0);
    
            if (mapOfLetters.containsKey(guessedLetter)) {
    
                correctGuesses++;
                System.out.printf("Correct Guess! %d Letters Left!\n", secretWord.length() - correctGuesses);
    
                int count = mapOfLetters.get(guessedLetter) - 1;
                if (count == 0) {
                    mapOfLetters.remove(guessedLetter);
                } else {
                    mapOfLetters.put(guessedLetter, count);
                }
            } else {
                strikes--;
                System.out.printf("Incorrect: You Have %d Chances Left..\n", strikes);
            }
        }
    
        if (strikes == 0) {
            System.out.println("You Are Out of Chances! Game over!");
        } else if(mapOfLetters.isEmpty()){
            System.out.println("You Got It! The Word is: " + secretWord);
        }
    }