Java Hangman程序

时间:2014-04-28 17:32:52

标签: java

我需要帮助找出代码中的以下错误:替换正确的错误 用户在神秘词中输入的字母。我的最后一个方法的功能是这样做但是 我无法弄清楚为什么它只输入一个正确的字母而不是所有正确的猜测。此外,用户拥有的最大尝试次数为8但是当我编译程序时,尝试次数将进入底片并且我无法弄清楚我的最大尝试循环有什么问题。提前谢谢!我真的很感激。 **此程序中还使用了多种方法,这是我的任务要求!

import java.util.*;
import java.io.*;

     public class Hangman {
 public static Scanner keyboard; 
 public static final int MAXSIZE = 15000;
 public static final int NUM_GUESS = 8; 
 public static final int WORD_LENGTH = 20; 
 public static void main(String[] args) {
 keyboard = new Scanner(System.in); 
 int random = pickrandom(MAXSIZE); 

    try {
        // Set up connection to the input file
        Scanner input = new Scanner(new FileReader("dictionary.txt"));
        String [] dictionaryWords = new String [MAXSIZE];
        int usedsize = 0;
        while ( usedsize < MAXSIZE && input.hasNextLine() ){
            dictionaryWords [usedsize] = input.nextLine();
            usedsize ++; 
            }
        System.out
        .println("              H A N G M A N. " +
                "\n This is a word guessing game. " +
                "\n A word will be selected at random and kept hidden. You will try to figure out the secret word by" +
                "\n guessing letters which you think are in the word. " +
                "\n You will guess one letter at a time. " +
                "\n If the letter you guess is correct, the position(s) of the letter in the secret word will be shown. " +
                "\n You will be allowed " + NUM_GUESS + " wrong guesses  If you guess incorrectly " + NUM_GUESS+ " times, you lose the game. " +
                "\n If you guess all of the letters in the word, you win." +
                "\n\n Press enter to continue ");
        keyboard.nextLine(); 
        clearScreen();
        String word = dictionaryWords[random];

        System.out.println(dictionaryWords[random]);
        String blank = blankWord(word);

        String decision; 
        //decision = keyboard.nextLine().toUpperCase();
        System.out.println("Word to guess :");
        System.out.println(blank);
        int tries = NUM_GUESS; 

        System.out.println("Enter a letter to guess or 9 to quit");
        String guess = keyboard.next();
        do{

             //System.out.println(tries); 
        while (!guess.equals("9") || !(guess.equals(word)  && tries >0))
                {
                char letter = guess.charAt(0); 
                String guesses = "";
                guesses += letter;
                if (word.indexOf(letter) < 0) {
                    tries--;
                    System.out.println("Incorrect letters tried: " + guess);
                    System.out.println("Number of guesses left: " + tries);
                    System.out.println("Enter a letter to guess or 9 to quit");
                    guess = keyboard.next();
                }
                else {
                    String correctWord = correctWord( guess,  word,  blank, letter );
                    System.out.println(correctWord); 
                    System.out.println("Enter a letter to guess or 9 to quit");
                    tries--;
                    System.out.println("Number of guesses left: " + tries);
                    guess = keyboard.next();
                    tries--;
                    System.out.println("Number of guesses left: " + tries);
                }












            }
        if (guess.equals("9")){
            System.out.println("Thanks for playing");

        }
        if ( guess.equals(word)){
            System.out.println("You won!");
        }
        if( tries == 0){
            System.out.println("You have no more guesses left"); 
        }
        System.out.println("Play again? Y/N");
        decision = keyboard.nextLine().toUpperCase();

        } while (decision.equals("Y"));
        //System.out.println("Play again? Y/N");
        //decision = keyboard.nextLine().toUpperCase();
    }
    catch (FileNotFoundException e) {
        System.out.println("There was an error opening one of the files.");
    }


}
//Clears screen after introduction 
private static void clearScreen (){
    for (int blanks = 0; blanks < 80; blanks++) {
        System.out.println();
    }
}

// This method returns a randomly selected integer
// between 0 and count-1
public static int pickrandom(int count) {
    Random generator = new Random();
    return generator.nextInt(count);
}

// Places asterisks in place of the letters in the word
// Parameter is the string word. it holds mystery word

public static String blankWord(String word) {
    String blank = "";

    for (int i = 0; i < word.length(); i++) {

        blank += " * ";
    }
    return blank;
}
//Replaces asterisks with correct guess 
     public static void fillWord(String blank,String word, char letter ){
for ( int i = 0; i <word.length() ; i++){
    if(word.charAt(i) == letter){
        blank.charAt( i ); 

    }

}
  }
  //Receives correct guesses and replaces the asterisks with correct letter 
  //Parameters is  the mystery word 
    public static String newWord (String word){
 String newWord  = "";
 if (newWord.length() > 0){
     newWord += word.charAt(0);
     for (int i = 1; i <word.length(); i ++){
         newWord += word.charAt(0);
     }

 }
return newWord;  
  }
  //Counts the number of missed guesses and replaces total count
  //Parameters are the mystery word and the letter guesses from user 
  public static boolean alreadyGuessed(String word, String guess){
 for (int i = 0 ; i< word.length() ; i++){
     if (word.charAt(i)== guess.charAt(0)){
         return true; 
     }
 }
 return false; 
     }
         //Compares to see if the letter has already been guessed
      //Parameters are the mystery word and the user's guess 
      public static boolean letterGuessed(String word, String guess){
     for (int i = 0 ; i< word.length(); i++){
     if (word.charAt(i) == guess.charAt(0)){
         return true;
     }
 }
 return false; 
    }
   //Replaces correct guess in blanks 
     public static String correctWord(String guess, String word, String blank, char letter){ 

    for (int i = 0; i < word.length(); i++) {

         if (letter == word.charAt(i)){
             if (i >0){
         blank = blank.substring (0, i) + letter + blank.substring(i +1);
             }
             if (i ==0){
                 blank = letter + blank.substring(1); 
             }

         }
    }
    return blank;
}



}

1 个答案:

答案 0 :(得分:0)

你的逻辑是倒退的。如果尝试是-1,那么:

while( ... || (guess.equals(word) && (tries < 8) && (tries > 0)) {
while( ... || (guess.equals(word) && (-1 < 8) && (-1 > 0)) {
while( ... || (guess.equals(word) && true && false)) {
while( ... || !(false)) {
while( ... || true) {
while(true) {

换句话说,你的循环永远不会终止,因为tries检查是错误的。

while (!guess.equals(word) && (tries > 0)) {

可能就是你想要的。