2014-04-25 125 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