2016-12-13 5 views
0

Я пытаюсь создать игру Hangman, но я не знаю, как правильно инициализировать массив wordDisplay, он дает ошибку Этот массив должен печатать символы подчеркивания для букв слова, чтобы угадать а затем подчеркивания заменяются буквами, которые были угаданных игрокомArrayIndexOutOfBoundsException in Hangman

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"); 
    } 

} 
+2

'это дает ошибку', какая ошибка? – SomeJavaGuy

+0

Исключение из темы "main" java.lang.ArrayIndexOutOfBoundsException: 5 \t at test2.Hangman.main (Hangman.java:19) – coldman1

+3

Я собираюсь написать Q & A, как написать игру Hangman на Java. – xenteros

ответ

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 должен быть инициализирован.

+0

Э Я сделал это, и после того, как я печатаю в одном письме, это дает ту же ошибку, – coldman1

+0

исключение в потоке «основного» java.lang.ArrayIndexOutOfBoundsException: 5 \t в test2.Hangman.main (Hangman.java:35) – coldman1

+0

фигу I исправлено это – coldman1

1

Инициализировать ваш массив с длиной вы имеете

char[] wordDisplay = new char[k] 

и изменить ваш for на:

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

Имейте в виду, что ваш первый индекс равен 0

+0

@coldcash подумайте о принятии/повышении/обоих, если он ответил на ваш вопрос, чтобы другие знали. –

-1

Вы должны не только объявить, но инициализировать массив. Поскольку массив имеет фиксированный размер, вы должны инициализировать его с его размером. С другой стороны, это длина от входной строки. Так, например:

char[] wordDisplay = new char[k];