Java에서 2D 배열의 배열 길이 얻기


129

행과 열 모두에 대해 2D 배열의 길이를 가져와야합니다. 다음 코드를 사용 하여이 작업을 성공적으로 수행했습니다.

public class MyClass {

 public static void main(String args[])
    {
  int[][] test; 
  test = new int[5][10];

  int row = test.length;
  int col = test[0].length;

  System.out.println(row);
  System.out.println(col);
    }
}

예상대로 5, 10이 인쇄됩니다.

이제이 줄을 살펴보십시오.

  int col = test[0].length;

열 길이를 얻으려면 실제로 특정 행을 참조해야합니다. 나에게 이것은 엄청나게 추한 것 같습니다. 또한 배열이 다음과 같이 정의 된 경우 :

test = new int[0][10];

그러면 길이를 얻으려고 할 때 코드가 실패합니다. 이 작업을 수행하는 다른 (보다 지능적인) 방법이 있습니까?


나는 매우 포괄적 다음 참조를 발견 programiz.com/java-programming/multidimensional-array
— 호세인 라 히미

답변:


182

치다

public static void main(String[] args) {

    int[][] foo = new int[][] {
        new int[] { 1, 2, 3 },
        new int[] { 1, 2, 3, 4},
    };

    System.out.println(foo.length); //2
    System.out.println(foo[0].length); //3
    System.out.println(foo[1].length); //4
}

열 길이는 행마다 다릅니다. 고정 크기 2D 배열로 일부 데이터를 백업하는 경우 래퍼 클래스의 고정 값에 게터를 제공하십시오.


1
답변과 관련이없는 질문입니다. "{...};"을 넣은 곳에 기술 / 방법은 무엇입니까? 객체 정의 후 새로운 개발자로서 나는 이것을 점점 더 많이보고 있습니다.
— user432209

글쎄, 나는 그것을 많이 이해한다 :). 방금 기술의 특정 이름이있을 수 있다고 생각했습니다.
— user432209

이름이 무엇인지 확실하지 않은 경우-객체 초기화? 인라인 초기화? 우리의 자바 지도자 중 하나 인 알
— NG를.

8
JLS 10.6 및 15.10에 따라 중괄호 부분은 단순히 배열 이니셜 라이저이고 new로 시작하는 모든 것은 배열 작성 표현식입니다.
— ILMTitan

17

2D 배열은 직사각형 격자가 아닙니다. 또는 Java의 2D 배열과 같은 것은 없습니다.

import java.util.Arrays;

public class Main {
  public static void main(String args[]) {

    int[][] test; 
    test = new int[5][];//'2D array'
    for (int i=0;i<test.length;i++)
      test[i] = new int[i];

    System.out.println(Arrays.deepToString(test));

    Object[] test2; 
    test2 = new Object[5];//array of objects
    for (int i=0;i<test2.length;i++)
      test2[i] = new int[i];//array is a object too

    System.out.println(Arrays.deepToString(test2));
  }
}

출력

[[], [0], [0, 0], [0, 0, 0], [0, 0, 0, 0]]
[[], [0], [0, 0], [0, 0, 0], [0, 0, 0, 0]]

배열 test과 test2(거의) 동일합니다.


12

정말 기억하기 힘들었습니다

    int numberOfColumns = arr.length;
    int numberOfRows = arr[0].length;

왜 그런지, 그리고 배열 문제가 생겼을 때이를 어떻게 알아낼 수 있는지 이해합시다. 아래 코드에서 행 = 4 및 열 = 3임을 알 수 있습니다.

    int[][] arr = { {1, 1, 1, 1}, 

                    {2, 2, 2, 2}, 

                    {3, 3, 3, 3} };

arr여러 배열이 있고 이러한 배열은 세로 방식으로 배열하여 열 수를 얻을 수 있습니다. 행 수를 얻으려면 첫 번째 배열에 액세스하고 길이를 고려해야합니다. 이 경우 [1, 1, 1, 1]에 액세스하여 행 수 = 4가됩니다. 배열을 볼 수없는 문제가 발생하면 배열을 사각형으로 시각화 할 수 있습니다. n X m 차원으로 첫 번째 배열에 액세스 한 다음 길이에 액세스하여 행 수를 얻을 수 있다고 결론을 내립니다. 다른 하나 arr.length는 열에 대한 것입니다.


8
당신은 이것을 거꾸로 가지고 있습니다. "이 경우에는 [1, 1, 1, 1]에 액세스하므로 행 수 = 4입니다." 실제로, 이는 4 개의 열이 있음을 의미합니다.
— Evan Rosica

@Evan Rosica
— Nitin Nanda

5

Java를 사용하면 각 "행"의 길이가 다른 "비정형 배열"을 만들 수 있습니다. 정사각형 배열을 알고 있다면 다음과 같이 빈 배열로부터 보호하기 위해 수정 된 코드를 사용할 수 있습니다.

if (row > 0) col = test[0].length;

4

이 배열이있는 경우 :

String [][] example = {{{"Please!", "Thanks"}, {"Hello!", "Hey", "Hi!"}},
                       {{"Why?", "Where?", "When?", "Who?"}, {"Yes!"}}};

당신은 이것을 할 수 있습니다 :

example.length;

= 2

example[0].length;

= 2

example[1].length;

= 2

example[0][1].length;

= 3

example[1][0].length;

= 4


나는 비슷한 대답을 보았지만 예제를 이해하는 것이 더 쉽다고 생각합니다!

3

다차원 배열이 모두 직사각형이 아니기 때문에 언어 수준에서 더 깔끔한 방법은 없습니다. 때때로 들쭉날쭉 한 (서로 다른 열 길이) 배열이 필요합니다.

필요한 기능을 추상화하기 위해 자신 만의 클래스를 쉽게 만들 수 있습니다.

배열에 국한되지 않으면 Multimap 과 같이 다양한 컬렉션 클래스 중 일부가 작동 할 것 입니다.


1

.length = 행 수 / 열 길이

[0] .length = 열 수 / 행 길이


1
SO에 오신 것을 환영합니다. 답변에 설명을 더 추가해야합니다.
— m02ph3u5

0

Java에서 2D 배열에 대해 다음 프로그램을 시도하십시오.

public class ArrayTwo2 {
    public static void main(String[] args) throws  IOException,NumberFormatException{
        BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
        int[][] a;
        int sum=0;
        a=new int[3][2];
        System.out.println("Enter array with 5 elements");
        for(int i=0;i<a.length;i++)
        {
            for(int j=0;j<a[0].length;j++)
            {
            a[i][j]=Integer.parseInt(br.readLine());
            }
        }
        for(int i=0;i<a.length;i++)
        {
            for(int j=0;j<a[0].length;j++)
            {
            System.out.print(a[i][j]+"  ");
            sum=sum+a[i][j];
            }
        System.out.println();   
        //System.out.println("Array Sum: "+sum);
        sum=0;
        }
    }
}

0
import java.util.Arrays;

public class Main {

    public static void main(String[] args) 
    {

        double[][] test = { {100}, {200}, {300}, {400}, {500}, {600}, {700}, {800}, {900}, {1000}};

        int [][] removeRow = { {0}, {1}, {3}, {4}, };

        double[][] newTest = new double[test.length - removeRow.length][test[0].length];

        for (int i = 0, j = 0, k = 0; i < test.length; i++) {
            if (j < removeRow.length) {
                if (i == removeRow[j][0]) {
                    j++;
                    continue;
                }
            }
            newTest[k][0] = test[i][0];
            k++;
        }

        System.out.println(Arrays.deepToString(newTest));   
    }
}

[[300.0], [600.0], [700.0], [800.0], [900.0], [1000.0]]을 정수로 변환하여 소수점을 잃게됩니다. 이 솔루션은 입력 배열이 항상 크기 ([x] [1]) 인 것으로 가정합니다
— RobynVG

0

을 사용 Java 8하면 다음과 같이 더 우아한 것을 할 수 있습니다.

int[][] foo = new int[][] {
        new int[] { 1, 2, 3 },
        new int[] { 1, 2, 3, 4},
    };

int length = Arrays.stream(array).max(Comparator.comparingInt(ArrayUtils::getLength)).get().length

-2
public class Array_2D {
int arr[][];
public Array_2D() {
    Random r=new Random(10);
     arr = new int[5][10];
     for(int i=0;i<5;i++)
     {
         for(int j=0;j<10;j++)
         {
             arr[i][j]=(int)r.nextInt(10);
         }
     }
 }
  public void display()
  {
         for(int i=0;i<5;i++)

         {
             for(int j=0;j<10;j++)
             {
                 System.out.print(arr[i][j]+" "); 
             }
             System.out.println("");
         }
   }
     public static void main(String[] args) {
     Array_2D s=new Array_2D();
     s.display();
   }  
  }

1
이것은 질문과 관련이 없습니다
— alfonso.kim
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.