2012-11-09 6 views
0

필요하면 치수를 늘릴 수있는 동적 인 다차원 배열을 만드는 것이 가능합니까?배열의 자바 증가 차원

// Array[] 1 has 2 dimensions 
if(blah=blah) 
{ 
    Array[] 1 gets second dimension and is now Array[][] 
} 
+0

int []를 int [] []로 대체 하시겠습니까? 아니면 int []를 크기 조정 하시겠습니까? –

+2

'int []'와'int [] []'가 다르게 메모리에 저장되어 있기 때문에 힘든 시간을 보냅니다. 이 기능이 필요한 이유에 대한 컨텍스트를 제공 할 수 있습니까? 아마도 당신에게 더 나은 해결 방법이있을 것입니다. – Grambot

+0

@TheCapn 나는 간단한 카드 게임을 만들고 컴퓨터로 게임을하고 게임의 모든 결과를 찾고 최상의 결과를 얻으려고합니다. 게임의 각 단계가 기록됩니다. 나는 모든 결과를 큰 배열에 저장하여 그것을 살펴보고 최고의 결과를 고를 수 있기를 원합니다. 문제는, 내가 게임이 끝날 때까지 얼마나 많은 단계를 거쳐야하는지 알지 못한다. 그래서 나는 miltidim을 생각했다. 배열은 나를 위해 최선을 다할 것입니다. 어떻게 생각해? –

답변

5

아니, 그것은 불가능하다 : 배열 OFN 차원의 수가 아니라 배열, 객체 배열의 유형의 속성입니다, 당신이이 작업을 수행 할 수 있도록 내장 된 자바 배열 .

런타임에 차원 수를 변경할 수있는 배열을 에뮬레이션하려면 고유 한 클래스를 만들어야합니다. 배열 또는 ArrayList에 해당 클래스를 기반으로 할 수 있지만 한 가지 제한이 있습니다. 에뮬레이트 된 배열에서 첨자 연산자를 사용할 수 없기 때문입니다.

또한 "못생긴"해결책이 있습니다. 배열을 유형없이 저장할 수 있습니다. 본질적으로 타입이없는 Object입니다. 이 같은 유형 Object의 변수에 차원의 수와 배열을 할당 할 수 있습니다

a[2][1][0] = 7; // Will not compile 

이 :

Object a = new int[10]; 
a = new int[10][2]; 
a = new int[10][2][5]; 

캐치 당신이 캐스트를 수행하지 않고 같은 배열의 요소에 액세스 할 수 없다는 것입니다 컴파일 작업하지만, 구조는 오히려 읽을 것입니다 : 당신이하지 않는 한

((int[][][])a)[2][1][0] = 7; 

는 또한, 배열의 이전 내용을 재 할당에 손실 될 수 있습니다 그것의 사본.

관련 문제