2014-03-14 28 views
1

我一直對Java項目對我來說類,而我幾乎已經完成。該程序是一個hang子手遊戲,用戶輸入一個字母,程序繼續根據字母是否在單詞中。我遇到的問題是,我無法弄清楚如何使它所以當用戶輸入一個以上的字母,數字或符號,那麼程序將打印出來,上面寫着「無效的輸入,再試一次」,並擁有了用戶的聲明再輸入一些內容,而不是將其顯示爲錯過的嘗試或不在該單詞中的「字母」。這裏是我的代碼:僅運行程序,如果輸入一個字母

import java.util.Scanner; 
import java.util.Random; 
import java.io.*; 

public class Hangman { 

    private Scanner in = new Scanner(System.in); 
    private boardPiece[] board = {new boardPiece(0),new boardPiece(0),new boardPiece(3), 
      new boardPiece(1),new boardPiece(2),new boardPiece(0)}; 
    private String puzzle; 
    private String puzzleWord; 
    private int puzzleIndex; 
    private Random generator = new Random(System.currentTimeMillis()); 
    private boolean win; 
    private boolean over; 
    private String correct = ""; 
    private char guesses[] = new char[26]; 
    private int guessed; 
    private int misses; 
    private String puzzles[] = new String[5]; 

    public static void main(String [] args){ 

     String letter; 
     String again = "y"; 

     Hangman game = new Hangman(); 

     try{ 
      BufferedReader in = 
       new BufferedReader(new FileReader("puzzles.txt")); 

      int count = 0; 
      while (in.ready()) { //while there is another line in the input file 
       game.puzzles[count] = in.readLine(); //get line of data 
       count++; //Increment CWID counter 
      } 
      in.close(); 
     } 
     catch(IOException e){ 
      System.out.println("Error during reading/writing"); 
     } 

     System.out.println("Welcome to HangMan!"); 
     System.out.println("To play, guess a letter to try to guess the word."); 
     System.out.println("Every time you choose an incorrect letter another"); 
     System.out.println("body part appears on the gallows. If you guess the"); 
     System.out.println("word before you're hung, you win"); 
     System.out.println("If you get hung, you lose"); 
     System.out.println(); 
     System.out.println("Time to guess..."); 

     while(again.charAt(0) == 'y'){ 
      game.displayGallows(); 

      while(!game.over){ 
       game.printBoard(); 
       game.printLettersGuessed(); 
       System.out.println("The word so far: " + game.puzzle); 
       System.out.println("Choose a letter: "); 
       letter = game.in.next(); 

       game.guesses[game.guessed] = letter.charAt(0); 
       game.guessed++; 
       game.sort(); 

       if(game.puzzleWord.indexOf(letter.charAt(0)) != -1){ 
        game.correct = game.correct + letter.charAt(0); 
        game.puzzle = game.puzzleWord.replaceAll("[^"+game.correct+" ]","-"); 
        if(game.puzzleWord.replaceAll("["+game.correct+" ]","").length() == 0){ 
         game.win = true; 
         game.over = true; 
        } 

       } 
       else 
        game.PrintWrongGuesses(); 
      } 
      game.printBoard(); 
      System.out.println("Solution: " + game.puzzleWord); 
      if(game.win) 
       System.out.println("Congratulations! You've solved the puzzle!"); 
      else 
       System.out.println("You failed, failer!"); 

      System.out.println(); 
      System.out.println("Congratulations, you win!"); 
      System.out.println("Do you want to play again? (y/n)"); 
      again = game.in.next(); 
     } 
     System.out.println("Goodbye!"); 
    } 

    public void displayGallows(){ 

     win = false; 
     over = false; 

     board[0].piece = " ______ "; 
     board[1].piece = " | | "; 
     board[2].piece = "   | "; 
     board[3].piece = "   | "; 
     board[4].piece = "   | "; 
     board[5].piece = " _______| "; 

     puzzleIndex = generator.nextInt(puzzles.length); 
     puzzleWord = puzzles[puzzleIndex]; 

     puzzle = puzzleWord.replaceAll("[A-Za-z]","-"); 
     correct = ""; 
     for(int x=0;x<26;x++) 
      guesses[x] = '~'; 
     guessed = 0; 
     misses = 0; 
    } 

    public void printBoard(){ 
     for(int x =0;x<6;x++) 
      System.out.println(board[x].piece); 
    } 

    public void PrintWrongGuesses(){ 
     misses++; 
     System.out.println(); 
     if(misses == 1){ 
      board[2].piece = " 0 | "; 
      System.out.println("Number of misses: " + misses); 
     } 
     else if(misses == 2){ 
      board[2].piece = " \\0 | "; 
      System.out.println("Number of misses: " + misses); 
     } 
     else if(misses == 3){ 
      board[2].piece = " \\0/ | "; 
      System.out.println("Number of misses: " + misses); 
     } 
     else if(misses == 4){ 
      board[3].piece = " | | "; 
      System.out.println("Number of misses: " + misses); 
     } 
     else if(misses == 5){ 
      board[4].piece = " / | "; 
      System.out.println("Number of misses: " + misses); 
     } 
     else if(misses == 6){ 
      board[4].piece = " /\\ | "; 
      System.out.println("Number of misses: " + misses); 
      over = true; 
     } 

    } 

    public void printLettersGuessed(){ 
     System.out.print("Letters guessed already: "); 
     for(int x=0;x<26;x++){ 
      if(guesses[x] != '~') 
       System.out.print(guesses[x] + " "); 
     } 
     System.out.println(); 
    } 

    public void sort(){ 
     boolean doMore = true; 
     while (doMore) { 
      doMore = false; // assume this is last pass over array 
      for (int i=0; i<guesses.length-1; i++) { 
       if (guesses[i] > guesses[i+1]) { 
        char temp = guesses[i]; 
        guesses[i] = guesses[i+1]; 
        guesses[i+1] = temp; 
        doMore = true; // after an exchange, must look again 
       } 
      } 
     } 
    } 

    class boardPiece{ 
     public String piece; 
     public int total; 
     public int used; 

     boardPiece(int x){ 
      used = 0; 
      total = x; 
     } 
    } 
} 

回答

2
 System.out.println("Choose a letter: "); 
     letter = game.in.next(); 

     if(letter.length() == 1) 
     { 
      game.guesses[game.guessed] = letter.charAt(0); 
      game.guessed++; 
      game.sort(); 

      if(game.puzzleWord.indexOf(letter.charAt(0)) != -1){ 
       game.correct = game.correct + letter.charAt(0); 
       game.puzzle = game.puzzleWord.replaceAll("[^"+game.correct+" ]","-"); 
       if(game.puzzleWord.replaceAll("["+game.correct+" ]","").length() == 0){ 
        game.win = true; 
        game.over = true; 
       } 

      } 
      else 
       game.PrintWrongGuesses(); 
     }else 
     { 
      System.out.println("Invalid input, try again"); 
     } 
+0

謝謝。有關如何在輸入整數時顯示相同錯誤的任何提示? –

+0

嗯,這不是最漂亮的解決方案,但你可以嘗試解析字符串,如果解析失敗,請繼續,即布爾confirmedNum = TRUE;嘗試{int _tmp = Integer.parseInt(letter); } catch(Exception ex){confirmedNum = false; } if(letter.length()== 1 &&!confirmedNum)... – DFreeman

+0

有人已經以一種非常簡單的方式回答了這個問題的一部分。謝謝你! –

0

試試這個,

import java.util.Scanner; 
import java.util.Random; 
import java.io.*; 

public class Hangman { 

    private Scanner in = new Scanner(System.in); 
    private boardPiece[] board = {new boardPiece(0),new boardPiece(0),new boardPiece(3), 
      new boardPiece(1),new boardPiece(2),new boardPiece(0)}; 
    private String puzzle; 
    private String puzzleWord; 
    private int puzzleIndex; 
    private Random generator = new Random(System.currentTimeMillis()); 
    private boolean win; 
    private boolean over; 
    private String correct = ""; 
    private char guesses[] = new char[26]; 
    private int guessed; 
    private int misses; 
    private String puzzles[] = new String[5]; 

    public static void main(String [] args){ 

     String letter; 
     String again = "y"; 

     Hangman game = new Hangman(); 

     try{ 
      BufferedReader in = 
       new BufferedReader(new FileReader("puzzles.txt")); 

      int count = 0; 
      while (in.ready()) { //while there is another line in the input file 
       String input = in.readLine(); 
       if(input.length() == 1){ 
        game.puzzles[count] = ; //get line of data 
        count++; //Increment CWID counter 
       } 
       else{ 
       System.out.println("INVALID INPUT"); 
       } 
      } 
      in.close(); 
     } 
     catch(IOException e){ 
      System.out.println("Error during reading/writing"); 
     } 

     System.out.println("Welcome to HangMan!"); 
     System.out.println("To play, guess a letter to try to guess the word."); 
     System.out.println("Every time you choose an incorrect letter another"); 
     System.out.println("body part appears on the gallows. If you guess the"); 
     System.out.println("word before you're hung, you win"); 
     System.out.println("If you get hung, you lose"); 
     System.out.println(); 
     System.out.println("Time to guess..."); 

     while(again.charAt(0) == 'y'){ 
      game.displayGallows(); 

      while(!game.over){ 
       game.printBoard(); 
       game.printLettersGuessed(); 
       System.out.println("The word so far: " + game.puzzle); 
       System.out.println("Choose a letter: "); 
       letter = game.in.next(); 

       game.guesses[game.guessed] = letter.charAt(0); 
       game.guessed++; 
       game.sort(); 

       if(game.puzzleWord.indexOf(letter.charAt(0)) != -1){ 
        game.correct = game.correct + letter.charAt(0); 
        game.puzzle = game.puzzleWord.replaceAll("[^"+game.correct+" ]","-"); 
        if(game.puzzleWord.replaceAll("["+game.correct+" ]","").length() == 0){ 
         game.win = true; 
         game.over = true; 
        } 

       } 
       else 
        game.PrintWrongGuesses(); 
      } 
      game.printBoard(); 
      System.out.println("Solution: " + game.puzzleWord); 
      if(game.win) 
       System.out.println("Congratulations! You've solved the puzzle!"); 
      else 
       System.out.println("You failed, failer!"); 

      System.out.println(); 
      System.out.println("Congratulations, you win!"); 
      System.out.println("Do you want to play again? (y/n)"); 
      again = game.in.next(); 
     } 
     System.out.println("Goodbye!"); 
    } 

    public void displayGallows(){ 

     win = false; 
     over = false; 

     board[0].piece = " ______ "; 
     board[1].piece = " | | "; 
     board[2].piece = "   | "; 
     board[3].piece = "   | "; 
     board[4].piece = "   | "; 
     board[5].piece = " _______| "; 

     puzzleIndex = generator.nextInt(puzzles.length); 
     puzzleWord = puzzles[puzzleIndex]; 

     puzzle = puzzleWord.replaceAll("[A-Za-z]","-"); 
     correct = ""; 
     for(int x=0;x<26;x++) 
      guesses[x] = '~'; 
     guessed = 0; 
     misses = 0; 
    } 

    public void printBoard(){ 
     for(int x =0;x<6;x++) 
      System.out.println(board[x].piece); 
    } 

    public void PrintWrongGuesses(){ 
     misses++; 
     System.out.println(); 
     if(misses == 1){ 
      board[2].piece = " 0 | "; 
      System.out.println("Number of misses: " + misses); 
     } 
     else if(misses == 2){ 
      board[2].piece = " \\0 | "; 
      System.out.println("Number of misses: " + misses); 
     } 
     else if(misses == 3){ 
      board[2].piece = " \\0/ | "; 
      System.out.println("Number of misses: " + misses); 
     } 
     else if(misses == 4){ 
      board[3].piece = " | | "; 
      System.out.println("Number of misses: " + misses); 
     } 
     else if(misses == 5){ 
      board[4].piece = " / | "; 
      System.out.println("Number of misses: " + misses); 
     } 
     else if(misses == 6){ 
      board[4].piece = " /\\ | "; 
      System.out.println("Number of misses: " + misses); 
      over = true; 
     } 

    } 

    public void printLettersGuessed(){ 
     System.out.print("Letters guessed already: "); 
     for(int x=0;x<26;x++){ 
      if(guesses[x] != '~') 
       System.out.print(guesses[x] + " "); 
     } 
     System.out.println(); 
    } 

    public void sort(){ 
     boolean doMore = true; 
     while (doMore) { 
      doMore = false; // assume this is last pass over array 
      for (int i=0; i<guesses.length-1; i++) { 
       if (guesses[i] > guesses[i+1]) { 
        char temp = guesses[i]; 
        guesses[i] = guesses[i+1]; 
        guesses[i+1] = temp; 
        doMore = true; // after an exchange, must look again 
       } 
      } 
     } 
    } 

    class boardPiece{ 
     public String piece; 
     public int total; 
     public int used; 

     boardPiece(int x){ 
      used = 0; 
      total = x; 
     } 
    } 
} 
0

可以使用String.length()用於檢查輸入的長度,例如你的情況

if(letter.length() != 1) { 
    // do something to handle error 
} 
0

String.length()可以用來判斷,如果輸入了一個字母。要檢查是否讀String是一個字母,您可以使用Character.isLetter(char)

try{ 
     BufferedReader in = 
      new BufferedReader(new FileReader("puzzles.txt")); 

     int count = 0; 
     String line = null; 
     while (in.ready()) { //while there is another line in the input file 
      line = in.readLine(); 

      if (line.length() == 1 && Character.isLetter(line.charAt(0)) { 
       game.puzzles[count] = line; //get line of data 
       count++; //Increment CWID counter 
      } else { 
       // handle the else-case 
      } 

     } 
     in.close(); 
    } 
    catch(IOException e){ 
     System.out.println("Error during reading/writing"); 
    } 
2

您可以使用正則表達式來檢查輸入。

if (!letter.matches("[a-zA-Z]{1}")) { 
    System.out.println("Invalid Input") { 
else { 
    <your other code> 
} 
相關問題