Hangman游戏中的ArrayIndexOutOfBoundsException

时间:2016-12-13 13:30:01

标签: java arrays indexoutofboundsexception

我正在尝试创建一个Hangman游戏,但我不知道如何正确初始化wordDisplay数组,它会出错 这个数组应该打印出下划线,用于猜测单词的字母,然后下划线被播放器猜到的字母替换

public class Hangman
{
    static Scanner userInput = new Scanner(System.in);

    public static void main(String args[])
    {
        String strword = "wordo";
        char[] theWord = strword.toCharArray();
        int k = strword.length();
        int c;

        char[] wordDisplay;

        for(c=0;c<=k;c++)
        {
            wordDisplay[c] = '_';
        }

        int hang = 0;
        int i;

        while(hang<k+10)
        {

            System.out.println("type a letter");

            for(i=0;i<5;i++)
            {
                System.out.print( wordDisplay[i] );
            }
            char userLetter = userInput.next().charAt(0);
            for(i=0;i<=k;i++)
            {
                if(userLetter==theWord[i])
                {
                    System.out.println("a letter guessed");
                    wordDisplay[i] = theWord[i];
                }
                else
                {
                    hang++;
                }
            }


        }   
        System.out.println("you hang");
    }

}

3 个答案:

答案 0 :(得分:2)

而不是

    char[] wordDisplay;

    for(c=0;c<=k;c++)
    {
        wordDisplay[c] = '_';
    }

写:

    char[] wordDisplay = new char[k+1];
    for(c=0;c<=k;c++) {
        wordDisplay[c] = '_';
    }

    char[] wordDisplay = new char[k];
    for(c=0;c<k;c++) {
        wordDisplay[c] = '_';
    }

必须初始化Java中的每个对象。

答案 1 :(得分:1)

使用您拥有的长度初始化数组

char[] wordDisplay = new char[k]

并将您的for更改为:

for(c=0;c<k;c++)
  {
    wordDisplay[c] = '_';
  }

请记住,您的第一个索引是0

答案 2 :(得分:-1)

您不仅要声明,还要初始化数组。由于数组具有固定大小,因此应使用其大小对其进行初始化。另一方面,这是输入字符串的长度。例如:

PyGObject