Получение длины массива 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];
тогда код не сработает при попытке получить длину. Есть ли другой (более умный) способ сделать это?
7 ответов:
рассмотрим
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-массива фиксированного размера, то предоставьте геттеры для фиксированных значений в классе-оболочке.
2D массив не является прямоугольной сеткой. Или, может быть, лучше, нет такой вещи, как 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
(больше или меньше) то же самое.
Java позволяет создавать "рваные массивы", где каждая" строка " имеет разную длину. Если вы знаете, что у вас есть квадратный массив, вы можете использовать свой код, измененный для защиты от пустого массива следующим образом:
if (row > 0) col = test[0].length;
нет более чистого способа на уровне языка, потому что не все многомерные массивы являются прямоугольными. Иногда необходимы зубчатые (разной длины столбцов) массивы.
вы можете легко создать свой собственный класс, чтобы абстрагировать функциональность вам нужно.
Если вы не ограничены массивами, то, возможно, некоторые из различных классов коллекций будут работать также, как Multimap.
попробуйте следующую программу для 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; } } }
если у вас есть этот массив:
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
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(); } }