De arraylengte van een 2D-array in Java ophalen

Ik heb de lengte van een 2D-array nodig voor zowel de rij als de kolom. Ik heb dit met succes gedaan, met behulp van de volgende code:

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);
    }
}

Hiermee worden 5, 10 afgedrukt zoals verwacht.

Kijk nu eens naar deze regel:

 int col = test[0].length;

Merk op dat ik eigenlijk naar een bepaalde rij moet verwijzen om de kolomlengte te krijgen. Dit lijkt me ongelooflijk lelijk. Bovendien, als de array is gedefinieerd als:

test = new int[0][10];

Dan zou de code mislukken bij het proberen om de lengte te krijgen. Is er een andere (intelligentere) manier om dit te doen?


Antwoord 1, autoriteit 100%

Overweeg

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
}

Kolomlengtes verschillen per rij. Als je bepaalde gegevens ondersteunt met een 2D-array met een vaste grootte, geef dan getters voor de vaste waarden in een wrapper-klasse.


Antwoord 2, autoriteit 11%

Een 2D-array is geen rechthoekig raster. Of misschien beter, er bestaat niet zoiets als een 2D-array in 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));
  }
}

Uitgangen

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

De arrays testen test2zijn (min of meer) hetzelfde.


Antwoord 3, autoriteit 6%

Het was echt moeilijk om dat te onthouden

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

Laten we begrijpen waarom dit zo is en hoe we dit kunnen achterhalen wanneer we een matrixprobleem krijgen. Uit de onderstaande code kunnen we zien dat rijen = 4 en kolommen = 3:

   int[][] arr = { {1, 1, 1, 1}, 
                    {2, 2, 2, 2}, 
                    {3, 3, 3, 3} };

arrheeft meerdere arrays en deze arrays kunnen verticaal worden gerangschikt om het aantal kolommen te krijgen. Om het aantal rijen te krijgen, moeten we toegang krijgen tot de eerste array en rekening houden met de lengte ervan. In dit geval hebben we toegang tot [1, 1, 1, 1] en dus het aantal rijen = 4. Als je een probleem krijgt waarbij je de array niet kunt zien, kun je de array visualiseren als een rechthoek met n X m dimensies en concluderen dat we het aantal rijen kunnen krijgen door toegang te krijgen tot de eerste array en vervolgens de lengte ervan. De andere (arr.length) is voor de kolommen.


Antwoord 4, autoriteit 2%

Java stelt je in staat om “rafelige arrays” te maken waarbij elke “rij” verschillende lengtes heeft. Als je weet dat je een vierkante array hebt, kun je je code gebruiken om te beschermen tegen een lege array, zoals deze:

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

Antwoord 5, autoriteit 2%

Als je deze array hebt:

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

U kunt dit doen:

example.length;

= 2

example[0].length;

= 2

example[1].length;

= 2

example[0][1].length;

= 3

example[1][0].length;

= 4


Antwoord 6

Er is geen schonere manier op taalniveau omdat niet alle multidimensionale arrays rechthoekig zijn. Soms zijn gekartelde (verschillende kolomlengtes) arrays nodig.

Je zou gemakkelijk je eigen klas kunnen maken om de functionaliteit die je nodig hebt te abstraheren.

Als je niet beperkt bent tot arrays, zouden sommige van de verschillende collectieklassen misschien ook werken, zoals een Multimap.


Antwoord 7

.length = aantal rijen / kolomlengte

[0].length = aantal kolommen / rijlengte


Antwoord 8

Probeer dit volgende programma voor 2D-array in 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;
        }
    }
}

Antwoord 9

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));   
    }
}

Antwoord 10

Met Java 8kun je iets eleganters als dit doen:

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

Antwoord 11

Voorbeeld Array 1:

int arr[][] = { { 1, 3, 1, 5 },
                 { 2, 2, 4, 1 },
                 { 5, 0, 2, 3 },
                 { 0, 6, 1, 2 } };

Voorbeeld Array 2:

int arr[][] = { { 1, 3, 1 },
                 { 2, 2, 4 },
                 { 5, 0, 2 },
                 { 0, 6, 1 } };

De onderstaande functie werkt voor elke symmetrische en asymmetrische array-matrix

row_Count = arr.length
 olumn_Count = arr[0].length

Antwoord 12

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();
   }  
  }

Other episodes