2014-04-25 5 views
-3

Vous vous demandez comment sortir si la phrase totale est devinée et pourquoi mes voyelles, espaces et consonnes ne comptent pas? La plupart des programmes fonctionnent très bien, mais je n'arrive pas à comprendre comment sortir sans dire "n" à la question. Je retourne des valeurs pour les compteurs, ne comprends pas?Jeu de devinettes en langage Java

import java.util.Scanner; 

public class Prog09 
{ 
public static void main(String[] args) 
{ 
    Scanner stdIn = new Scanner(System.in); 

    // Initializes all string variables 
    String sPhrase; 
    String answer; 

    // Initializes all int variables 
    int vowels = 0; 
    int consonants = 0; 
    int spaces = 0; 

    // Initializes all char variables 
    char cGuess = 0; 
    char vGuess = 0; 

    boolean valid = false; 

    // Asks user to enter if they want to play 
    System.out.print("Do you want to play a game? [y/n] "); 
    answer = stdIn.nextLine(); 

    // Asks user to enter the phrase 
    System.out.print("Please enter the phrase to guess at : "); 
    sPhrase = stdIn.nextLine(); 

    // Checks if user wants to play 
    while (answer.equalsIgnoreCase("y")) 
    { 
     char[] phrase = new char[sPhrase.length()]; 
     char[] tmpArr = new char[sPhrase.length()]; 
     for(int i = 0; i < sPhrase.length();i++) 
     { 
      tmpArr[i] = sPhrase.charAt(i); 
      phrase[i] = sPhrase.charAt(i); 
     } 

     // Runs methods and main body of program 
     initTemplateArray(sPhrase, tmpArr, spaces); 

     printHeader(); 
     printTemplateArray(tmpArr); 
     System.out.println(""); 
     System.out.println(""); 

     while (answer.equalsIgnoreCase("y")) 
     { 
      //getConsonant(stdIn, cGuess); 
      cGuess = getConsonant(stdIn, cGuess); 

      vGuess = getVowel(stdIn, vGuess); 

      isVowel(vGuess, valid); 

      updateTemplateArray(tmpArr, sPhrase, cGuess, vGuess, consonants, vowels); 

      printHeader(); 
      printTemplateArray(tmpArr); 
      System.out.println(""); 
      System.out.println(""); 

      stdIn.nextLine(); 
      System.out.print("Do you want to try again? [y/n]: "); 
      answer = stdIn.next(); 

      vGuess = 0; 
      cGuess = 0; 

     } 
    } 

    // Prints results 
    System.out.println("The common phrase contained: Spaces: " + spaces + " Consonants: " + consonants + " Vowels: " + vowels); 

    stdIn.close(); 
} 

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 


// Methods for program 
public static int initTemplateArray(String sPhrase, char [] tmpArr, int spaces) 
{ 
    for (int i = 0; i < sPhrase.length(); i++) 
    { 
     if (sPhrase.charAt(i) == ' ') 
     { 
      spaces++; 
      tmpArr[i] = ' '; 
     } 

     if (!(sPhrase.charAt(i) == ' ')) 
     { 
      tmpArr[i] = '?'; 
     } 
    } 

    return spaces; 
} 

public static void printTemplateArray(char [] tmpArr) 
{ 
    for (int i = 0; i < tmpArr.length; i++) 
    { 
     System.out.print(tmpArr[i]); 
    } 
    System.out.println(); 
} 

public static boolean isVowel(char c, boolean valid) 
{ 
    if(c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u') 
     { 
      return valid = true; 
     } 
    else 
     { 
      return valid = false; 
     } 
} 

public static char getConsonant(Scanner stdIn, char cGuess) 
{ 
    while(cGuess == 'a' || cGuess == 'e' || cGuess == 'i' || cGuess == 'o' || cGuess == 'u'|| cGuess == 0) 
    { 
     System.out.print("Enter a lowercase consonant guess : "); 
     String myGuess = stdIn.next(); 
     cGuess = myGuess.charAt(0); 
    } 

    return cGuess; 
} 

public static char getVowel(Scanner stdIn, char vGuess) 
{ 
    while(!(vGuess == 'a' || vGuess == 'e' || vGuess == 'i' || vGuess == 'o' || vGuess == 'u')) 
    { 
     System.out.print("Enter a lowercase vowel guess : "); 
     String newGuess = stdIn.next(); 
     vGuess = newGuess.charAt(0); 
    } 

    return vGuess; 
} 

public static int updateTemplateArray(char [] tmpArr, String sPhrase, char cGuess, char vGuess, int consonants, int vowels) 
{ 
    vowels = 0; 
    consonants = 0; 

    for (int i = 0; i < tmpArr.length; i++) 
    { 
     if (cGuess == sPhrase.charAt(i)) 
     { 
      tmpArr[i] = sPhrase.charAt(i); 
      consonants++; 
     } 

     if (vGuess == sPhrase.charAt(i)) 
     { 
      tmpArr[i] = sPhrase.charAt(i); 
      vowels++; 
     } 
    } 
    return consonants & vowels; 
} 

public static void printHeader() 
{ 
    System.out.println(""); 
    System.out.println(" Common Phrase"); 
    System.out.println("---------------"); 
} 

}

Répondre

0

Java passe Ints par valeur plutôt que par référence, cela signifie que updateTemplateArray ne modifie pas les valeurs des voyelles, des consonnes de principal ou d'espaces. Pour résoudre ce problème, vous pouvez:

Rendre ces variables globales en les définissant en dehors du cadre de la méthode principale. Vous devez modifier le nom des paramètres dans la méthode updateTemplateArray pour empêcher l'observation.

Rompre updateTemplateArray en fonctions séparées pour compter chacune des voyelles, consonnes ou espaces, et leur demander de retourner le nombre de chacune. Vous appelez alors quelque chose comme: voyelles = countVowels (sPhrase); pour remplir les variables.

Avec la configuration actuelle, il sortira lorsque la réponse cessera d'être égale à 'y'. La modification de la valeur de réponse à tout moment quittera la boucle.

+0

encore besoin d'un moyen si elles devinent la phrase complète, il va également quitter? – user3525012

+0

vous auriez juste besoin de changer la valeur de réponse à quelque chose d'autre que y. Il va quitter les deux boucles. Si vous voulez quitter l'interne mais pas l'externe, vous devez modifier l'instruction while de la boucle interne à une autre variable et modifier cette variable. –

+0

Y at-il un moyen de l'écrire de sorte que quand sPhrase = tmpArr il se ferme, ou quelque chose autour de ces lignes? – user3525012