我的大部分程序都已完成,但现在我有大部分代码,很难找到错误。我目前有多个错误,但我真正需要帮助的主要错误是我的程序将循环相同的猜测&如果它是正确的。它是一个无限循环,&我找不到它的位置。这也引起了我的注意,我的程序将进入负面猜测,因为它应该在它达到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.");
}
}
答案 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循环。等...
尝试使用已知参数编写代码的一小部分,然后将它们整合在一起,这样就可以更容易地构建并遵循逻辑。