it-roy-ru.com

Получение длины массива 2D массива в Java

Мне нужно получить длину 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];

Тогда код потерпит неудачу при попытке получить длину. Есть ли другой (более разумный) способ сделать это?

94
user432209

Рассматривать

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
}

Длина столбцов отличается в зависимости от строки. Если вы поддерживаете некоторые данные двумерным массивом с фиксированным размером, предоставьте получателям фиксированные значения в классе-оболочке.

131
NG.

2D массив не является прямоугольной сеткой. Или, может быть, лучше, в Java нет такого понятия, как двумерный массив. 

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 (более или менее) одинаковы.

11
Ishtar

Java позволяет создавать «рваные массивы», где каждая «строка» имеет разную длину. Если вы знаете, что у вас есть квадратный массив, вы можете использовать модифицированный код для защиты от пустого массива, например: 

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

На уровне языка нет более чистого пути, потому что не все многомерные массивы являются прямоугольными. Иногда необходимы неровные (с разной длиной столбца) массивы.

Вы можете легко создать свой собственный класс, чтобы абстрагировать необходимую вам функциональность.

Если вы не ограничены массивами, то, возможно, некоторые из различных классов коллекций также сработают, например Multimap .

3
kaliatech

Если у вас есть этот массив:

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

2
Andy

Это было действительно трудно запомнить 

    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) для столбцов. 

2
gocode

Попробуйте следующую программу для 2d массива в Java:

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;
        }
    }
}
1
Pampanagouda Karmanchi

.length = количество строк/длина столбца

[0] .length = количество столбцов/длина строки

0
asdfgghjkll
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));   
    }
}
0
RobynVG