2 차원 배열을 만들기위한 구문


438

치다:

int[][] multD = new int[5][];
multD[0] = new int[10];

이것이 5 개의 행과 10 개의 열로 2 차원 배열을 만드는 방법입니까?

이 코드를 온라인에서 보았지만 구문이 맞지 않았습니다.


또한 첫 번째 문에서 2 차원 배열을 10 개의 열이있는 것으로 정의 할 수도 있습니다. int [] [] multD = 새로운 int [5] [10];
committedandroider

답변:


814

다음을 시도하십시오 :

int[][] multi = new int[5][10];

... 이것은 짧은 손입니다 :

int[][] multi = new int[5][];
multi[0] = new int[10];
multi[1] = new int[10];
multi[2] = new int[10];
multi[3] = new int[10];
multi[4] = new int[10];

모든 요소에 대한 기본 값으로 초기화됩니다주의 int, 0이상의 사항에 해당합니다, 그래서 :

int[][] multi = new int[][]{
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
};

27
재미있는 부분은 다른 행에 다른 열을 가질 수도 있다는 것입니다. 예를 들면 :-int [] [] multi = new int [5] []; multi [0] = 새로운 정수 [10]; multi [1] = 새로운 정수 [6]; multi [2] = new int [9]도 완벽하게 유효합니다
JavaTec

2
Hi Muneeb, 내가 올바르게 이해하면 각 행의 열 크기가 다른 다차원 배열을 요청하고 값을 할당하는 방법을 묻습니다. 방법은 다음과 같습니다. int [] [] multi = new int [] [] {{1,2,3}, {1,2,3,4}, {1}}; for (int i = 0; i <multi.length; i ++) {for (int j = 0; j <multi [i] .length; j ++) {System.out.println ( "행 :"+ i + "열 :"+ j + "값 :"+ multi [i] [j]); }}
JavaTec

1
우리가 사용해야합니까 new int[][]에서 =new int[][]{...}변형? 그냥 쓸 수 ={...}있을까요?
Nawaz

2
@Nawaz 아니요, 배열은 java의 객체이며 메모리는 new키워드 를 사용하여 객체에 할당됩니다 .
roottraveller

1
@Oldrinb int array[][] = new int[3][];VS는 어떻습니까 int array[][] = new int[][3];?? 어딘가에서 두 버전을 모두 읽었으므로 어느 것이 합법적입니까?
roottraveller

77

2 차원 배열을 선언하고 선언시 다음과 같이 요소를 직접 저장할 수 있습니다.

int marks[][]={{50,60,55,67,70},{62,65,70,70,81},{72,66,77,80,69}};

여기서 int 는 배열에 저장된 정수형 요소를 나타내며 배열 이름은 'marks'입니다. int 는 "{"및 "}"중괄호 안에 표시된 모든 요소의 데이터 형식입니다. 배열은 데이터 형식이 같은 요소의 모음이기 때문입니다.

위에 쓰여진 성명서로 돌아갑니다. 각 요소 행은 중괄호 안에 작성해야합니다. 각 행의 행과 요소는 쉼표로 구분해야합니다.

이제 명령문을 관찰하십시오. 3 개의 행과 5 개의 열이 있으므로 JVM은 3 * 5 = 15 개의 메모리 블록을 작성합니다. 이 블록들은 개별적으로 다음과 같이 지칭 될 수 있습니다 :

marks[0][0]  marks[0][1]  marks[0][2]  marks[0][3]  marks[0][4]
marks[1][0]  marks[1][1]  marks[1][2]  marks[1][3]  marks[1][4]
marks[2][0]  marks[2][1]  marks[2][2]  marks[2][3]  marks[2][4]


참고 : n 개의 요소
를 저장 하려면 배열 인덱스가 0에서 시작하여 n-1로 끝납니다 . 2 차원 배열을 만드는 또 다른 방법은 먼저 배열을 선언 한 다음 new 연산자를 사용하여 배열을 할당하는 것입니다.

int marks[][];           // declare marks array
marks = new int[3][5];   // allocate memory for storing 15 elements

위의 두 가지를 결합하면 다음과 같이 작성할 수 있습니다.

int marks[][] = new int[3][5];

이것이 데이터를 입력하는 가장 간결한 방법이라고 생각합니다.
thanos.a

51

다른 사람들이 언급 한대로 만들 수 있습니다. 추가 할 점 하나 더 : 다음과 같이 반드시 같은 수의 열을 가질 필요는 없지만 각 행마다 기울어 진 2 차원 배열을 만들 수도 있습니다.

int array[][] = new int[3][];
array[0] = new int[3];
array[1] = new int[2];
array[2] = new int[5];

5
잘했다! 이것이 독립 초기화의 가장 중요한 측면입니다.
Ahamed

@Victor int array[][] = new int[3][];VS는 어떻습니까 int array[][] = new int[][3];?? 어딘가에서 두 버전을 모두 읽었으므로 어느 것이 합법적입니까?
roottraveller 2016 년

30

510 열의 2 차원 배열을 만드는 가장 일반적인 관용구 는 다음 과 같습니다.

int[][] multD = new int[5][10];

또는 각 행을 명시 적으로 초기화해야하지만 다음과 같은 것을 사용할 수 있습니다.

int[][] multD = new int[5][];
for (int i = 0; i < 5; i++) {
  multD[i] = new int[10];
}

3
또한 프리미티브 만 초기화 할 필요가 없음을 인식하십시오. 배열을 선언 Object[][] ary2d = new Object[5][10];하면 2D 배열의 각 요소를 계속 초기화해야합니다.
Armand

3
null기본 요소가 아닌 다른 사례를 안전하게 처리하지 않는 한 각 요소를 초기화해야하는지 여부는 디자인에 전적으로 의존합니다. 또한 명확히하기 위해-프리미티브는 null 일 수 없으며 사용자가 직접 지정하지 않으면 정의 된 기본값으로 인스턴스화 될 수 없습니다. 예를 들어 an int은 null 일 수 없으며 int i;값을 지정하지 않고 말할 때는 기본 값 0이 사용됩니다. 여기에 대해 읽어보십시오
불가분 한

한 번 더 설명하면 기본값은 클래스 / 인스턴스 변수에만 전달됩니다. 사용하기 전에 지역 변수 (메소드 내부)를 수동으로 초기화해야합니다.
불가분의

12

다음과 같이 선언 할 수도 있습니다. 좋은 디자인은 아니지만 작동합니다.

int[] twoDimIntArray[] = new int[5][10];

9

시험:

int[][] multD = new int[5][10];

코드에서 2D 배열의 첫 번째 행만 0으로 초기화됩니다. 행 2 ~ 5는 존재하지 않습니다. 당신이 그들을 인쇄하려고하면 당신 null은 그들 모두를 얻을 수 있습니다.


8
int [][] twoDim = new int [5][5];

int a = (twoDim.length);//5
int b = (twoDim[0].length);//5

for(int i = 0; i < a; i++){ // 1 2 3 4 5
    for(int j = 0; j <b; j++) { // 1 2 3 4 5
        int x = (i+1)*(j+1);
        twoDim[i][j] = x;
        if (x<10) {
            System.out.print(" " + x + " ");
        } else {
            System.out.print(x + " ");
        }
    }//end of for J
    System.out.println();
}//end of for i

8

Java에서는 2 차원 배열을 1 차원 배열과 동일하게 선언 할 수 있습니다. 1 차원 배열에서는 다음과 같이 쓸 수 있습니다.

  int array[] = new int[5];

여기서 int는 데이터 형식이고 array []는 배열 선언이며 new array5 개의 인덱스가있는 개체가있는 배열입니다.

이와 같이 다음과 같이 2 차원 배열을 작성할 수 있습니다.

  int array[][];
  array = new int[3][4];

다음 array은 int 데이터 형식입니다. 먼저 해당 유형의 1 차원 배열을 선언하면 3 행 및 4 열 배열이 생성됩니다.

당신의 코드에서

int[][] multD = new int[5][];
multD[0] = new int[10];

5 개의 행으로 2 차원 배열을 만들었 음을 의미합니다. 첫 번째 행에는 10 개의 열이 있습니다. Java에서는 원하는대로 모든 행의 열 크기를 선택할 수 있습니다.


7
int rows = 5;
int cols = 10;

int[] multD = new int[rows * cols];

for (int r = 0; r < rows; r++)
{
  for (int c = 0; c < cols; c++)
  {
     int index = r * cols + c;
     multD[index] = index * 2;
  }
}

즐겨!


1
이것은 C와 같은 2D 배열을 지원하지 않는 언어에서 유용합니다!
Alaa

3
C는 다차원 배열도 지원합니다.
Ricardo Cruz


3

이러한 유형의 배열을 Java에서 들쭉날쭉 한 배열이라고합니다.

int[][] multD = new int[3][];
multD[0] = new int[3];
multD[1] = new int[2];
multD[2] = new int[5];

이 시나리오에서 배열의 각 행은 다른 수의 열을 보유합니다. 위의 예에서 첫 번째 행에는 3 개의 열이 있고 두 번째 행에는 2 개의 열이 있고 세 번째 행에는 5 개의 열이 있습니다. 아래와 같이 컴파일 타임에이 배열을 초기화 할 수 있습니다 :

 int[][] multD = {{2, 4, 1}, {6, 8}, {7, 3, 6, 5, 1}};

배열의 모든 요소를 ​​쉽게 반복 할 수 있습니다.

for (int i = 0; i<multD.length; i++) {
    for (int j = 0; j<multD[i].length; j++) {
        System.out.print(multD[i][j] + "\t");
    }
    System.out.println();
}

0

실제로 Java에는 수학적으로 다차원 배열이 없습니다. Java에는 배열 배열, 각 요소가 배열 인 배열이 있습니다. 그렇기 때문에이를 초기화하기위한 절대 요구 사항이 첫 번째 차원의 크기 인 것입니다. 나머지가 지정되면 기본값으로 채워진 배열이 작성됩니다.

int[][]   ar  = new int[2][];
int[][][] ar  = new int[2][][];
int[][]   ar  = new int[2][2]; // 2x2 array with zeros

또한 우리에게 기발한 느낌을줍니다. 하위 배열의 크기는 더 많은 요소를 추가하여 변경할 수 없지만 임의 크기의 새 배열을 할당하여 변경할 수 있습니다.

int[][]   ar  = new int[2][2];
ar[1][3] = 10; // index out of bound
ar[1]    = new int[] {1,2,3,4,5,6}; // works
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.