Получение длины массива 2D-массива в Java
Мне нужно получить длину 2D-массива как для строки, так и для столбца. Ive успешно выполнил это, используя следующий код:
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];
Тогда код будет терпеть неудачу при попытке получить длину. Есть ли другой (более интеллектуальный) способ сделать это?
Ответы
Ответ 1
Рассмотрим
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-массива с фиксированным размером, тогда предоставляйте получателям фиксированные значения в классе-оболочке.
Ответ 2
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
являются (более или менее) одинаковыми.
Ответ 3
Это было действительно трудно запомнить
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
) для столбцов.
Ответ 4
Java позволяет создавать "оборванные массивы", где каждая "строка" имеет разную длину. Если вы знаете, что у вас есть квадратный массив, вы можете использовать свой код для защиты от пустого массива следующим образом:
if (row > 0) col = test[0].length;
Ответ 5
Там нет более чистого способа на уровне языка, потому что не все многомерные массивы прямоугольны. Иногда требуются массивы с зазубренными (разными столбцами).
Вы можете легко создать свой собственный класс для абстрактной функциональности, в которой вы нуждаетесь.
Если вы не ограничены массивами, возможно, некоторые из классов коллекций будут работать, как Multimap.
Ответ 6
Если у вас есть этот массив:
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
Ответ 7
Попробуйте следующую программу для 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;
}
}
}
Ответ 8
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));
}
}
Ответ 9
.length = количество строк/длина столбца
[0].length = количество столбцов/длина строки
Ответ 10
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();
}
}