如何提示用户输入Java Hangman游戏的其他输入?

时间:2014-08-07 21:22:39

标签: java loops input

我有一个初学Java课程的作业,要求我创建一个名为Hangman的课程。该程序应该提示用户(玩家1)输入String,然后在屏幕上为屏幕中的每个角色打印破折号。程序然后要求第二个用户(玩家2)一次猜出一个字符,直到该字被猜到,或者他们有六次失败的尝试。在验证每个正确的猜测后,字符串中相应的短划线将替换为正确的字母。

此时我创建了将在用户String中扫描的代码,并用短划线替换String。该代码还会提示第二个用户输入比较字母。该代码还将替换破折号字符串中的第一个正确猜测。

此时我遇到的问题是,在第一次猜测后,我似乎无法找到提示用户输入其他内容的方法。程序将接受第一个正确的猜测,替换它,然后终止。我删除了一部分代码,用于检查输入了多少不正确/正确的猜测,因为此时代码将不断递增计数并终止程序。任何有关此问题的帮助将不胜感激。

更新

我重写了我的代码以删除不需要的/不必要的分支。这是我更新的代码。此时,我收到了太多不正确的猜测。代码计算通过不匹配的数组的每次迭代都是不正确的。我感谢您提供的任何帮助。

public class Hangman 
{


/**
 * @param args the command line arguments
 */
public static void main(String[] args) 
{
    String word;
    String letter = "";
    boolean gameOver = false;
    int correct = 0;
    int incorrect = 0;
    int index = 0;

    Scanner userIn = new Scanner(System.in);
    System.out.print("Player 1 enter a word: ");
    word = userIn.nextLine();
    String[] wordArray = word.split("");
    int wordLength = word.length();
    String[] wrong = {};
    String[] right = {};
    String[] dashes = new String[wordLength];
    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();

    for(int i = 0; i < wordLength; i++)
    {
        dashes[i] = "-";
    }
    for(int i= 0; i < wordLength; i++)
    {
        System.out.print(dashes[i] +" ");
    }
    System.out.println();


    while(incorrect < 6)
    {
        System.out.print("Player 2 enter a letter: ");
        letter = userIn.nextLine();
        letter = letter.toLowerCase();


        if(letter.length() > 1)
        {
            System.out.println("ERROR: You have entered more than one letter.");
            System.out.print("Player 2 enter a letter: ");
            letter = userIn.nextLine();
        }
        for(int i = 0; i < wordLength; i++)
        {
            if( wordArray[i].equals(letter))
            {   
                dashes[i] = letter;
                System.out.println("Correct!");
                for( i= 0; i < wordLength; i++)
                {
                    System.out.print(dashes[i] +" ");
                }
                correct++;
            }
            else
            {
                incorrect++;
            }
        }
    }
    if(correct == wordLength)
    {
        System.out.println();
        System.out.println("You Win!!");
        System.out.println();
    }
    if(incorrect == 6)
    {
        System.out.println("You Lose.");
        System.out.println("The word was " +word);
        System.out.println();
    }
}

}

1 个答案:

答案 0 :(得分:0)

所以,这是一大笔代码。而且我看到了一些有趣的决定。所以,既然你正在学习,我会帮助你自己帮助。

在接受这样的应用程序之前,你应该在实际编码之前首先考虑你的逻辑(伪代码)。所以对于一个刽子手游戏,你可能想要这样的东西:

player 1 enters phrase
while wrong_guesses < max_incorrect:
    prompt player 2 for a letter
    check the phrase for that letter
    if found
        replace dashes with the letter
    else
        wrong_guesses++
    print status message

只要看一下你的代码,我就可以看到你要求新输入的多个地方。这意味着您没有有效地使用循环。您的应用程序有很多不必要的分支,清理它将帮助您调试。作为练习,您可以浏览代码并编写其“伪代码”,然后将其与我的代码进行比较。

祝你好运!

<强>更新

对于新的和大大改进的代码,您的检查循环是错误的。看起来应该更像这样:

boolean found = false;
for(int i = 0; i < wordLength; i++)
{
    if( wordArray[i].equals(letter))
    {
        found = true;
        // replace dashes, and you don't need to loop here, 
        // do it after the check for better efficiency
    }
}
//Outside of the loop
if (!found)
{
    incorrect++;
}

//Print the current status here then

此外,您的支票只能被破坏(输入aa,然后再输入aa)。该块应该是:

if(letter.length() > 1)
{
    System.out.println("ERROR: You have entered more than one letter.");
    System.out.print("Player 2 enter a letter: ");
    //letter = userIn.nextLine();
    continue; //This tells java to restart the loop
}