HangMan游戏 - 游戏在输入所需单词后直接结束

时间:2015-04-21 08:10:55

标签: java class object

这是我写的代码,但是当我运行它时,它并没有让我有机会玩游戏。 它应该像Hangman游戏一样工作。

这是课程代码。

package assignment2q4;

import java.util.ArrayList;

public class Assignment2Q4 
{
    private final ArrayList<Character> guessList = new ArrayList<>();
    private final char[] charArray;
    private final String secretWord;
    private int guesses;

    public Assignment2Q4(String word)
    {
        guesses = 0;
        secretWord = word;
        charArray = secretWord.toCharArray();
        // TODO code application logic here
    }

    public void makeGuess(char c)
    {
        guessList.add(c);
        guesses += 1;
    }

    public int getGuessCount()
    {
        return guesses;
    }

    public String getSecretWord()
    {
        return secretWord;
    }

    public String getDisguisedWord()
    {
        char[] disguisedWord = new char[secretWord.length()];
        for(int i = 0; i < secretWord.length(); i++)
            disguisedWord[i] = '?';
        String aWord = "";
        char c;
        for(int i = 0; i < guessList.size(); i++)
        {
            c = guessList.get(i);
            for(int j = 0; j < charArray.length; j++)
            {
                if(c == charArray[j])
                    disguisedWord[j] = c;
            }
        }
        for(int i =0; i < secretWord.length(); i++)
            if(disguisedWord[i] == ' ')
                disguisedWord[i] = '?';
        for(int i = 0; i < secretWord.length(); i++)
            aWord = aWord + disguisedWord[i];
        return aWord;
    }

    public boolean isFound()
    {
        boolean correct = true;

        for(int i = 0; i < guessList.size(); i++)
            if(guessList.get(i) != charArray[i])
                correct = false;

        return correct;
    }

}

这是我的程序代码。

package assignment2q4;

import java.util.Scanner;

public class HangmanDemo 
{
    public static void main(String[] args)
    {
    String answer = " ", hiddenWord = " ";
    String guess;
    Scanner keyboard;
    keyboard = new Scanner(System.in);

    System.out.println("Enter the secret word: ");
    answer = keyboard.next();

    Assignment2Q4 hangman = new Assignment2Q4(answer);

    while(!hangman.isFound())
    {
        System.out.println("Guess a letter: ");
        guess = keyboard.next();

        hangman.makeGuess(guess);

        hiddenWord = hangman.getDisguisedWord();
        System.out.println(hiddenWord);
        }
    }
}

输出只是说:

  

&#34;输入密码。&#34;

然后我输入一个单词,程序说它成功运行而没有让我有机会玩。

1 个答案:

答案 0 :(得分:4)

让我们来看看你的主要条件循环:

public boolean isFound()
{
    boolean correct = true;

    for(int i = 0; i < guessList.size(); i++)
        if(guessList.get(i) != charArray[i])
            correct = false;

    return correct;
}

第一次加载课程时,请查看guessList.size();,您没有加载猜测。这意味着您的尺寸有效0

让我们回到你的主循环:

Assignment2Q4 hangman = new Assignment2Q4(answer);

    while(!hangman.isFound())

哎呀! while(!hangman.isFound())false,其中包含空猜测列表。你永远不会进入你的循环!

您需要重新考虑isFound()以使用空列表,或者您需要在主循环中使用do ... while(),如下所示:

do
    {
        System.out.println("Guess a letter: ");
        guess = keyboard.next();

        hangman.makeGuess(guess);

        hiddenWord = hangman.getDisguisedWord();
        System.out.println(hiddenWord);
        }
    } while(!hangman.isFound())
祝你好运!