2017-03-02 18 views
1

私はJavaプログラミングの方が新しく、ハングマンのゲームの開発に取り組んでいます。これは私のインストラクターが提案したエクササイズであり、基本版を完成した後、より高度なものを作りたいと思っていました。これまでのところ、コード内の問題はif文とelse if文の両方が実行されていることです。これを修正するために、いくつかのbreak文を追加しました。これは1つの問題に役立ちましたが、両方のステートメントはまだ実行されています。ここでif文とelse if文の両方が実行されます

が故障している場合はelse文は次のとおりです。すべての助けを事前に

import java.util.Scanner; 

public class Test { 
    public static Scanner input = new Scanner(System.in); 
    @SuppressWarnings({ "unused" }) 
    public static void main(String[] args) { 

     String[] words = new String[10]; 
     words[0] = "chair"; 
     words[1] = "apple"; 
     words[2] = "bear"; 
     words[3] = "word"; 
     words[4] = "table"; 
     words[5] = "cow"; 
     words[6] = "cabbage"; 
     words[7] = "food"; 
     words[8] = "computer"; 
     words[9] = "mouse"; 

     int cap_guess = 6; 
    int wrong_guess = 0; 
    int n = (int)(Math.random()*10); 
    String word = words[n]; 
    String out_word = ""; 
    int num_guess = 1; 
    for(int count = 0; count < word.length(); count ++){ 
     out_word += "*"; 
    } 
    boolean success = false; 
    String guess = ""; 
    String[] letters = new String[word.length()]; 
    for (int i = 0; i < letters.length; i++){ 
     letters[i] = word.substring(i,i+1); 
     System.out.println(letters[i]); 
    } 

    while (num_guess <= cap_guess){ 
     display(wrong_guess); 
     System.out.println(out_word); 
     System.out.print("Enter a guess: "); 
     guess = input.nextLine(); 
     guess = guess.trim(); 
     guess = guess.toLowerCase(); 
     System.out.println("Guess: " + guess); 

     char[] wordi = out_word.toCharArray(); 
     if (guess.length() == 1){ 
      for (int i = 0; i < word.length(); i++){ 
       if (guess.equals(letters[i])){ 
        wordi[i] = guess.charAt(i); 
        System.out.println("Included"); 
        break; 
       } 
       else if (!guess.equals(letters[i])){ 
        wordi[i] = '*'; 
        wrong_guess++; 
        num_guess ++; 
        System.out.println("Not included"); 
        break; 

       } 
      } 
      out_word += wordi; 

     } 
    } 

    /*System.out.println(word); 
    System.out.println(out_word);*/ 

} 
public static void display (int wrong_guess){ 
    if (wrong_guess == 0){ 
     System.out.println("_____________________"); 
     System.out.println(" *----------,  |"); 
     System.out.println(" |   |  |"); 
     System.out.println("    |  |"); 
     System.out.println("    |  |"); 
     System.out.println("    |  |"); 
     System.out.println("    |  |"); 
     System.out.println("    |  |"); 
     System.out.println("    |  |"); 
     System.out.println("    |  |"); 
     System.out.println("    |  |"); 
     System.out.println("    |  |"); 
     System.out.println("______________/-\\____|"); 
     System.out.println(""); 
    } 
    if (wrong_guess == 1){ 
     System.out.println("_____________________"); 
     System.out.println(" *----------,  |"); 
     System.out.println(" |   |  |"); 
     System.out.println(" /=\\   |  |"); 
     System.out.println(" |. .|  |  |"); 
     System.out.println(" \\-/   |  |"); 
     System.out.println("    |  |"); 
     System.out.println("    |  |"); 
     System.out.println("    |  |"); 
     System.out.println("    |  |"); 
     System.out.println("    |  |"); 
     System.out.println("    |  |"); 
     System.out.println("______________/-\\____|"); 
     System.out.println(""); 
    } 
    if (wrong_guess == 2){ 
     System.out.println("_____________________"); 
     System.out.println(" *----------,  |"); 
     System.out.println(" |   |  |"); 
     System.out.println(" /=\\   |  |"); 
     System.out.println(" |. .|  |  |"); 
     System.out.println(" \\-/   |  |"); 
     System.out.println(" |   |  |"); 
     System.out.println(" |   |  |"); 
     System.out.println(" |   |  |"); 
     System.out.println(" |   |  |"); 
     System.out.println("    |  |"); 
     System.out.println("    |  |"); 
     System.out.println("______________/-\\____|"); 
     System.out.println(""); 
    } 
    if (wrong_guess == 3){ 
     System.out.println("_____________________"); 
     System.out.println(" *----------,  |"); 
     System.out.println(" |   |  |"); 
     System.out.println(" /=\\   |  |"); 
     System.out.println(" |. .|  |  |"); 
     System.out.println(" \\-/   |  |"); 
     System.out.println(" |   |  |"); 
     System.out.println(" |\\   |  |"); 
     System.out.println(" | \\  |  |"); 
     System.out.println(" |   |  |"); 
     System.out.println("    |  |"); 
     System.out.println("    |  |"); 
     System.out.println("______________/-\\____|"); 
     System.out.println(""); 
    } 
    if (wrong_guess == 4){ 
     System.out.println("_____________________"); 
     System.out.println(" *----------,  |"); 
     System.out.println(" |   |  |"); 
     System.out.println(" /=\\   |  |"); 
     System.out.println(" |. .|  |  |"); 
     System.out.println(" \\-/   |  |"); 
     System.out.println(" |   |  |"); 
     System.out.println(" /|\\   |  |"); 
     System.out.println("/| \\  |  |"); 
     System.out.println(" |   |  |"); 
     System.out.println("    |  |"); 
     System.out.println("    |  |"); 
     System.out.println("______________/-\\____|"); 
     System.out.println(""); 
    } 
    if (wrong_guess == 5){ 
     System.out.println("_____________________"); 
     System.out.println(" *----------,  |"); 
     System.out.println(" |   |  |"); 
     System.out.println(" /=\\   |  |"); 
     System.out.println(" |. .|  |  |"); 
     System.out.println(" \\-/   |  |"); 
     System.out.println(" |   |  |"); 
     System.out.println(" /|\\   |  |"); 
     System.out.println("/| \\  |  |"); 
     System.out.println(" |   |  |"); 
     System.out.println(" /   |  |"); 
     System.out.println("/   |  |"); 
     System.out.println("______________/-\\____|"); 
     System.out.println(""); 
    } 
    if (wrong_guess == 6){ 
     System.out.println("_____________________"); 
     System.out.println(" *----------,  |"); 
     System.out.println(" |   |  |"); 
     System.out.println(" /=\\   |  |"); 
     System.out.println(" |x x|  |  |"); 
     System.out.println(" \\-/   |  |"); 
     System.out.println(" |   |  |"); 
     System.out.println(" /|\\   |  |"); 
     System.out.println("/| \\  |  |"); 
     System.out.println(" |   |  |"); 
     System.out.println(" /\\   |  |"); 
     System.out.println("/ \\  |  |"); 
     System.out.println("______________/-\\____|"); 
     System.out.println(""); 
    } 
} 
} 

感謝を:それは場合に役立ちます。ここ

   if (guess.equals(letters[i])){ 
        wordi[i] = guess.charAt(i); 
        System.out.println("Included"); 
        break; 
       } 
       else if (!guess.equals(letters[i])){ 
        wordi[i] = '*'; 
        wrong_guess++; 
        num_guess ++; 
        System.out.println("Not included"); 
        break; 

は完全なコードです。

+6

少なくともループの同じ繰り返しで、両方が実行されているとは思いません。彼らは言語仕様によると、単にできません。 –

+1

'else if(!guess.equals(letters [i])){'は 'else {'として簡単に書くことができます。 –

+0

なぜあなたは壊れていますか? – tramstheman

答えて

2

問題はbreakです。あなたはループのために、あなたは常に

for (int i = 0; i < word.length(); i++){ 
    boolean found = false; 
    if (guess.equals(letters[i])){ 
     wordi[i] = guess.charAt(i); 
     System.out.println("Included"); 
     found = true; 
    } 
    else if (!guess.equals(letters[i])){ 
     wordi[i] = '*'; 
    } 
} 
if (!found) 
    wrong_guess++; 
num_guess++; 

を破る私はしかし、私はいくつかのを残すつもりです、あなたのメインの少しクリーンアップテストしていませんが、

1

大丈夫でなければなりませんで反復しません。仕事はあなたに戻ってきます。おそらく、単語リストの初期化のようなものを独自のメソッドにラップするべきです。実際には、一般的には、通常、独自のメソッドに取り除くことができるコードのチャンクが推奨されます。私はあなたがこの極端な行為をしなければならないとは思わないが、あなたは8行以上の方法を持つべきではないと言われている。少し恣意的ですが、whileループ内で何が起こっているのかといったことは、独自のメソッドに入れることができるということです。コードのブロックを単一のタスクを実行するものとして記述することができれば、独自のメソッドに入れる必要があります。これは、すべてが特定の任務を実行するコードのチャンクにモジュール化されているため、デバッグ中にも役立ちます。すべてが適切に分解された場合、関連するスコープ内にのみコードが存在する必要があるため、問題がどこにあるかを簡単に知ることができます。単語配列の初期化を例として使用すると、これは垂直スペースを占有し、ユーザー入力の受け取り、ユーザー入力の検証、結果の表示などとは何の関係もありません。その機能の一部をデバッグする場合、それと関係のないコードを表示します。

@SuppressWarnings({ "unused" }) 
    public static void main(String[] args) 
    { 

     String[] words = new String[10]; 
     words[0] = "chair"; 
     words[1] = "apple"; 
     words[2] = "bear"; 
     words[3] = "word"; 
     words[4] = "table"; 
     words[5] = "cow"; 
     words[6] = "cabbage"; 
     words[7] = "food"; 
     words[8] = "computer"; 
     words[9] = "mouse"; 

     int cap_guess = 6; 
     int wrong_guess = 0; 
     int num_guess = 1; 
     String word = words[(int)(Math.random()*10)]; // one lined this 
     for(Character ch : word.toCharArray()) out_word += '*'; // loop through the char array and fill outword with * 

     System.out.println("The word is " + word); 
     boolean success = false; 

     String[] letters = new String[word.length()]; 
     for (int i = 0; i < letters.length; i++) 
     { 
      letters[i] = word.substring(i,i+1); 
      System.out.println(letters[i]); 
     } 

     while (num_guess <= cap_guess && !success)// we want to exit on success as well 
     { 
      display(wrong_guess); 
      System.out.println(out_word); 
      System.out.print("Enter a guess: "); 
      char guess = input.nextLine().toCharArray()[0]; // one line this, and it isn't used anywhere else so I moved this to the while loop 
      System.out.println("Guess: " + guess); 

      if(word.contains(String.valueOf(guess))) // if the word contains the character 
      { 
       System.out.println("Included"); 
       String temp = ""; 
       for(int i = 0; i < out_word.length(); i++) 
       { 
        temp += (word.charAt(i) == guess) ? guess : out_word.charAt(i); // "unveils" the correct characters 
       } 
       out_word = temp; 
       System.out.println("Outword: " + out_word); 
      } 
      else // else not else if 
      { 
       System.out.println("Not Included"); 
       wrong_guess++; 
      } 
      num_guess++; // don't need to put this in the if and else 
      success = word.equals(out_word); 
     } 
     if(success) System.out.println("You Won!"); // success 
     else System.out.println("You Lost!"); // failure 
    }