2015-01-29 4 views
0

특정 조건이 충족되는지 확인하기 위해 두 개의 배열을 사용하여 만든 메서드가 있습니다.이 메서드는 문제를 격리하기 위해 만든 테스트 메서드이지만 결과는 아닙니다. 많은 성공). 매번 나는 내가 자바에 아주 새로운 오전 오류배열 요소가 배열의 인덱스로 사용됨

java.lang.ArrayIndexOutOfBoundsException: 3 
at Player.testRNumber(Player.java:150) 
at GameOfSticks1.HumanVsAI(GameOfSticks1.java:79) 
at GameOfSticks1.main(GameOfSticks1.java:216) 

을 얻고, 무슨 일이 일어나고 있는지 알아 내려고 한 시간 후, 작은 성공을 거두었 한 코드를 실행 해보십시오. 어떤 도움이라도 정말로 감사 할 것입니다. 여기 제가 사용해온 방법이 있습니다.

public void testRNumber() 
    { 

     CurrentScore[0] = 1 
      int x = CurrentScore[0]; //this equals 12 btw 
      int y = CurrentScore[1]; //this equals 3 btw 
      System.out.println(x); 
      System.out.println(y); 
      System.out.println((ArrayOfBuckets[x][y]) + 2); 

      //everything above this comment**strong text** works fine. 

      if(ArrayOfBuckets[x-1][y] == 1) 
       System.out.println("Ok, so this if loop seems fine."); 

     } 
+0

귀하의 코드에서 150 행입니까? 그것을 실행할 때 12 및 3을 x 및 y 값으로 인쇄합니까? ArrayOfBuckets의 크기는 [x] [y]와 [x-1] [y]를 포함합니까? – sprinter

+0

당신이 제공 한 코드는'CurrentScore [0] = 1' 다음에 세미콜론이 없기 때문에 컴파일되지 않습니다. 그 문장이 수정되면'x'는'1' 값을 가지며 다음 문장 다음에'12'가 아닙니다. _actual_ 코드와'println' 문장의 출력을 제공하고 어떤 문장이 # 150인지 확인하십시오. –

+0

'//이 주석 위의 모든 것은 ... 잘 작동합니다 '그리고 던져진 예외가'ArrayIndexOutOfBounds'라는 사실에서 문제는'if (ArrayOfBuckets [x-1] [y ] == 1)'. –

답변

0

예외 메시지로 작성한 것처럼 배열 위의 요소에 액세스하려고합니다. ArrayOfBuckets의 크기는 [any] [3]로 표시되므로 최대 두 번째 인덱스 값은 2입니다. 나머지 코드 (배열 초기화 이상)를 표시하십시오.

+0

주석을 기반으로, 나는 OP가 당황스럽고'ArrayOfBuckets [x] [y]'가 작동하고'ArrayOfBuckets [x-1] [y]'는 그렇지 않다고 추측하고 있습니다. –

1

여기에 문제가 있습니다. 2D 어레이의 버킷은 직사각형이 아닙니다.

자바에서 2D 배열은 직사각형 일 필요는 없습니다.

{ 
    ...//Buckets 1 - 10 
    {value0, value1, value2}//bucket 11 has < 4 elements. 
    {value3, value4, value5, value6,...}//bucket 12 has >= 4 elements. 
    //Rest of buckets 
} 

ArrayOfBuckets[12][3] 작품을 호출하는 것을 의미하지만, ArrayOfBuckets[11][3]를 호출하는 것은하지 않습니다 : 내 생각 엔 당신의 배열 같은 것을 보이는 것입니다.

관련 문제