2012-11-18 1 views
1

저는 Java에 익숙하지 않지만 일반적으로 OOP는 아닙니다. 저는 사용자가 Java 클래스에 대해 무작위로 생성 된 패턴 (실제로는 숫자)의 증가하는 시퀀스를 따르는 고전적인 Simon 게임을 연구하고 있습니다. 오류가 발생합니다 :ArrayIndexOutOfBoundsException Simon 게임에서 왜 그림을 그릴 수 없습니까?

java.lang.ArrayIndexOutOfBoundsException: 20 
at Simon.generateSequence(Simon.java:58) 
at Simon.<init>(Simon.java:23) 

해결 방법을 찾을 수 없습니다. 배열보다 많은 요소를 호출하는 것처럼 보이지 않습니다. 여기에 코드입니다 :

import acm.program.*; 
import acm.graphics.*; 
import java.awt.Color; 
import java.awt.Font; 
import javax.swing.*; 
import java.awt.event.*; 


public class Simon extends Program implements ActionListener 
{ 
private int array[]; 
private int currentSeqLength; 
private int usersInput; 


public Simon() 
{ 
    //Initialize Class Values 
    array = new int[20]; 
    currentSeqLength = 1; 
    usersInput = 0; 

    generateSequence(); 

    while(currentSeqLength <= array.length) 
    { 
     playSequence(); 

     //Wait For User's Input Here, Assign To Variable 
     //usersInput = 

     if (pushButton(usersInput)== true) 
     { 

      currentSeqLength++; 
     } 

     else 
     { 
      gameOverMessage(); 
      break; 

      //Reset Variables: 

     } 

    } 


} 

public void generateSequence() 
{ 

    //Fill Array With Random Numbers 
    for (int i = 0; i <= array.length; i++) 
    { 
     array[i] = (int)(Math.random()*4); 

    } 


} 

public void setLength(int length) 
{ 
    //Set Current Length To Size Of Given Argument 
    currentSeqLength = length; 

} 

int getLength() 
{ 
    return currentSeqLength; 

} 

int[] playSequence() 
{ 
    //Print Out The Current Sequence 

    //New Local Array To Return 
    int newArray[]= new int[currentSeqLength]; 


    //Repeat As Many Times As Value Of currentSeqLength 
    for(int i = 0; i <= currentSeqLength ; i++) 
    { 
     System.out.println(array[i]); 

     //Return an array of int's to the player. 
     newArray[i] = array[i]; 

    } 

    return newArray; 
} 

boolean pushButton(int usersInput) 
{ 
    //Given A Button Press (0-3), Return Whether That Was The 
     //Correct Button To Play At The Moment 

    if (usersInput == array[currentSeqLength]) 
    { 
     return true; 
    } 

    else 
    { 
     return false; 
    } 


} 

boolean isTurnOver() 
{ 
    //If Current Sequence Length Matches Or Exceeds Value Of 
     //Array Element In Location Of Current Sequence Length 

    if (currentSeqLength >= array[currentSeqLength]) 
    { 
     return true; 
    } 

    else 
    { 
     return false; 
    } 

} 

//Not Needed? 
boolean isGameOver() 
{ 
    if (pushButton(usersInput) == false) 
    { 
     return true; 
    } 

    else 
    { 
     return false; 
    } 
} 

String gameOverMessage() 
{ 
    return "Game Over"; 
} 

/*public void actionPerformed(ActionEvent event) 
{ 
    int input; 


} 
*/ 

}

답변

0
for (int i = 0; i <= array.length; i++) 
    { 
     array[i] = (int)(Math.random()*4); 

    } 

은 0 20 20에서 반복되는 배열의 길이, 21 루프이 할 것 반복의 수입니다.

< =을 <으로 바꿉니다.

+0

고맙습니다. 하지만 이제 playSequence()에서도 같은 예외가 발생합니다. 나는 거기에서도 '='을 꺼내었지만, 92 행으로 진행되는 것처럼 보입니다. newArray [i] = array [i]; – FiringBlanks

+0

컴파일러 오류 메시지를 해석하는 것은 디버깅 도구를 사용하는 방법만큼이나 중요한 기술입니다. 특정 오류 메시지가 있습니까? – Toni

+0

예, 라인 92를 가리키고 있습니다. 코드 조각은 Simon의 \t입니다. (Simon.java:23) java.lang.ArrayIndexOutOfBoundsException : 1 \t at Simon.playSequence (Simon.java:92) \t (Simon. (Simon.java:27) – FiringBlanks

관련 문제