2013-04-11 57 views
0

我目前正在嘗試編寫一個基於文本的hang子手。如果你選擇猜測一封信,程序會在執行第53行後突然結束。請告訴我爲什麼會發生這種情況,因爲我無法弄清楚。Java程序突然在NetBeans中結束

這是我的一些Java代碼:

package hangman; 

import java.util.Random; 
import java.util.Scanner; 
import java.lang.String; 

public class Hangman { 

    public static void main(String[] args) { 
     // TODO code application logic here 
     Scanner chez = new Scanner(System.in); 
     Scanner waffle = new Scanner(System.in); 
     Random randomGenerator = new Random(); 
     StringBuilder displayWord = new StringBuilder("______________________________"); 
     String theWord = null; 
     String preLetter; 
     //String sbDisplayWord; 
     char letter = 0; 
     int randomNumber; 
     int lengthOfWord; 
     int numberOfLetterInWord = 0; 
     int gDisplay; 
     int guessWordNumber = 0; 
     String guessWord; 
     RandomWord troll = new RandomWord();  
     randomNumber = randomGenerator.nextInt(12); 
     //Fill var with the word. 
     theWord = troll.wordDecide(randomNumber); 

     System.out.println ("Welcome to Hangman!"); 

     lengthOfWord=theWord.length(); 
     System.out.println("This word has " + lengthOfWord + " letters."); 

     System.out.println("You have 20 guesses."); 

     for (int g =19; g >= 0; g--) {  

      System.out.println("If you want to guess the word, type 0. If you want to guess a letter, type 1."); 
      guessWordNumber=chez.nextInt(); 

      if (guessWordNumber==0) { 
       System.out.println("Enter the word now. Remember, don't capitalize it."); 
       guessWord=waffle.nextLine(); 
       if (guessWord.equals(theWord)) { 
        System.out.println("YOU WIN"); 
        System.exit(0); 
       } else { 
        System.out.println("Sorry, this wasn't the correct word."); 
       } 
      } else if (guessWordNumber==1) { 

       System.out.println("Please enter the letter you wish to guess with."); 
       //System.out.println("It will tell you if you have guessed right for any of the letters. If it is blank, that means none of the letters match."); 
       preLetter=chez.nextLine(); 

       if (preLetter.length()>0) { 
        letter=preLetter.charAt(0); 
       } else { 
        System.exit(0); 
       } 


       System.out.println(""); 
       for(int i = 0; i <= lengthOfWord -1; i++) {  //-Eshan 

        if (letter == theWord.charAt(i)) { 

         numberOfLetterInWord=i+1; 
         System.out.println("This letter matches with letter number " + numberOfLetterInWord + " in the word."); 
         displayWord.setCharAt(i, letter); 
        } else { 

         numberOfLetterInWord=i+1; 
         System.out.println("This letter doesn't match with letter number " + numberOfLetterInWord + " in the word."); 

        }  


       } 

       System.out.println(""); 
       System.out.println("The word so far is " + displayWord); 
       System.out.println(""); 
       gDisplay = g + 1; 
       System.out.println("You have " + gDisplay + " guesses left."); 

      } else { 
       System.exit(0); 
      } 

     } 

     System.out.println("GAME OVER"); 
     System.exit(0); 

    } 
} 

這是我的Java代碼的另一部分:

package hangman; 

public class RandomWord { 
    private static String[] wordArray = { 
     "psychology", 
     "keratin", 
     "nostalgia", 
     "pyromaniac", 
     "chlorophyl", 
     "derivative", 
     "unitard", 
     "pterodactyl", 
     "xylophone", 
     "excommunicate", 
     "obituary", 
     "infinitesimal", 
     "concupiscent", 
    }; 

    public String wordDecide(int randomNumber) { 
     String theWord; 
     theWord = wordArray[randomNumber]; 
     return theWord; 
    } 

} 
+0

上碼偶聯的評述。 RandomWord不應該需要隨機數參數。單詞數組的大小僅在「RandomWord」內部是已知的,所以隨機數字應該在'RandomWord'內部生成,如'randomNumber = Random.nextInt(wordArray.size)'中所示,並且不作爲參數傳遞。 – 2013-04-11 03:03:07

回答

0

因爲Scanner#nextInt不消耗換行符,此行

guessWordNumber = chez.nextInt(); 

傳遞一個換行符到

preLetter = chez.nextLine(); 

Scanner現在不阻止,因爲它已經收到輸入。 StringpreLetter現在是空的,因此導致程序退出。

嘗試使用Scanner#nextLine消耗換行符:

guessWordNumber = Integer.parseInt(chez.nextLine());