2014-04-25 188 views
-3

想知道如果總詞組被猜出,爲什麼我的元音,空格和輔音不算數,該如何退出?大多數程序運行良好,只是無法確定如何退出而不用說「n」來提問。我正在返回櫃檯值,不明白?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("---------------"); 
} 

}

回答

0

爪哇通過值而不是通過引用傳遞整數,這意味着updateTemplateArray不修改主要的元音,輔音或空間的值。要解決此問題,您可以:

通過將這些變量定義在主方法的範圍之外來使這些變量成爲全局變量。您必須更改updateTemplateArray方法中的參數名稱以防止出現陰影。

將updateTemplateArray分解爲單獨的函數來計算每個元音,輔音或空格,並讓它們返回每個元音的計數。然後你會調用類似於:vowels = countVowels(sPhrase);填充變量。

使用當前設置,只要答案停止等於'y',它就會退出。隨時更改答案的值將退出循環。

+0

仍然需要一種方式,如果他們猜測完整的短語它也將退出? – user3525012

+0

您只需要將答案的值更改爲y以外的值。它將退出兩個循環。如果你想退出內部但不是外部,那麼你需要將內部循環的while語句改爲其他變量,並更改該變量。 –

+0

有沒有辦法寫它,以便當sPhrase = tmpArr它退出,或圍繞這些行? – user3525012