Hangman程序中的Java循环问题(找不到)

时间:2015-12-06 23:00:16

标签: java arrays eclipse loops

我的大部分程序都已完成,但现在我有大部分代码,很难找到错误。我目前有多个错误,但我真正需要帮助的主要错误是我的程序将循环相同的猜测&如果它是正确的。它是一个无限循环,&我找不到它的位置。这也引起了我的注意,我的程序将进入负面猜测,因为它应该在它达到0时结束。其他一些很好的帮助是1)它显示正确的猜测是一个不正确的猜测2)它只能替换密码中的一个字母,如果有多个字母会给我一个错误&结束该计划。 &安培; 3)如果我输入9退出,它就不会退出。

提前感谢您的帮助。如果需要,我可以添加代码(我只发布主体ATM。)

public static final int DICTIONARY = 15000;
    public static final int GUESSES = 8;
    public static final int SECRETLENGTH = 20;  



 public static void main(String[] args) {
            int usedSize = 0, randomWord, guesses = GUESSES;
            String word, secretWord, guess, incorrectGuess, correctWord, playAgain;
            char letter;
try
{   
    // Set up connection to the input file
    Scanner hangmanDictionary = new Scanner(new FileReader("dictionary.txt"));
    String [] dictionary = new String [DICTIONARY];
    while (usedSize < DICTIONARY && hangmanDictionary.hasNextLine()) {
        dictionary[usedSize] = hangmanDictionary.nextLine();
        usedSize++;
    }
kbd.nextLine();
            clearScreen();

    randomWord = pickRandom(DICTIONARY);
    word = dictionary[randomWord];

    secretWord = secret(word);

    //comment out when done testing
    System.out.println(word);


    System.out.println("Here is the word to guess: " + secretWord);
    System.out.println("Enter a letter to guess, or 9 to quit.");

    guess = kbd.next();

    do {
        while (!guess.equals("9") || !(guess.equals(word) && guesses > 0)) {
            letter = guess.charAt(0);
            incorrectGuess = "";
            incorrectGuess += letter;
            if (word.indexOf(letter) < 0) {
                guesses--;
                System.out.println("Incorrect guesses: " + incorrectGuess);
                System.out.println("Number of guesses left: " + guesses);
                System.out.println("Enter a letter to guess, or 9 to quit.");
                guess = kbd.next();
            }
            else {
                //FINSH THIS
                correctWord = correctWord(guess, word, secretWord, letter);
                System.out.println(correctWord);
                System.out.println("Incorrect guesses: " + incorrectGuess);
                System.out.println("Number of guesses left: " + guesses);
                System.out.println("Enter a letter to guess, or 9 to quit.");
                guesses--;
            }
        }
            if (guess.equals("9")) {
                System.out.println("Thanks for playing!");
                System.exit(0);
            }
            if (guess.equals(word)) {
                System.out.println("You won!");
            }
            if (guesses == 0) {
                System.out.println("You are out of guesses.");
            }
            System.out.println("Play again? Y/N");
            playAgain = kbd.nextLine().toUpperCase();
    } while (playAgain.equals("Y"));

}

catch (FileNotFoundException e) {
    System.out.println("There was an error opening one of the files.");
}

}

2 个答案:

答案 0 :(得分:0)

这是我的猜测:

如果用户猜到了正确的字符,您是否忘记放guess = kbd.next();

答案 1 :(得分:0)

内部while循环是你的主要问题,即考虑输入有效字母(猜测)时会发生什么,在这种情况下,while循环OR条件的第一个条件为TRUE(假设你没有你的秘密词中的一个9),所以输入while循环而不进入OR条件的第二部分。之后你输入IF语句的else部分(因为它是一个有效的猜测)但是在else部分你不会要求下一个猜测,所以它返回到while循环的开始,相同的猜测,因此无限循环。

同样,如果输入9以退出!guess.equals("9"),则评估为FALSE,因此输入OR条件的第二部分,在第二部分中 !(guess.equals(word) && guesses > 0)计算结果为TRUE(除非密码包含9),因此您输入无效的WHILE循环。等...

尝试使用已知参数编写代码的一小部分,然后将它们整合在一起,这样就可以更容易地构建并遵循逻辑。