Viacrozmerné polia v Jave

Viacrozmerné polia v Jave

Array-Basics v Jave Viacrozmerné polia možno definovať jednoduchými slovami ako pole polí. Dáta vo viacrozmerných poliach sú uložené v tabuľkovej forme (v riadkovom poradí).

Syntax:

Dátový typ [1. dimenzia][2. dimenzia][].[N-tá dimenzia] názov_poľa = nový typ_údajov [veľkosť1][veľkosť2]…[veľkosťN];

kde:

  • Dátový typ : Typ údajov, ktoré sa majú uložiť do poľa. Napríklad: int, char atď.
  • rozmer : Rozmer vytvoreného poľa. Napríklad: 1D, 2D atď.
  • názov_poľa : Názov poľa
  • veľkosť1, veľkosť2, …, veľkosťN : Veľkosti rozmerov resp.

Príklady:

Two dimensional array: int[][] twoD_arr = new int[10][20];  Three dimensional array: int[][][] threeD_arr = new int[10][20][30]; 

Veľkosť viacrozmerných polí : Celkový počet prvkov, ktoré je možné uložiť do viacrozmerného poľa, možno vypočítať vynásobením veľkosti všetkých rozmerov.

Napríklad: Pole int[][] x = nový int[10][20] môže uložiť celkom (10*20) = 200 prvkov. Podobne pole int[][][] x = nový int[5][10][20] môže uložiť celkom (5*10*20) = 1000 prvkov.

Aplikácia Multi-Dimensional Array

● Viacrozmerné polia sa používajú na ukladanie údajov v tabuľkovej forme. Napríklad ukladanie čísla hodu a známok študenta sa dá ľahko vykonať pomocou viacrozmerných polí. Ďalším bežným použitím je ukladanie obrázkov do 3D polí.

● V otázkach dynamického programovania sa používajú viacrozmerné polia, ktoré sa používajú na reprezentáciu stavov problému.

● Okrem toho majú aplikácie aj v mnohých štandardných algoritmických problémoch, ako sú: násobenie matice, reprezentácia matice susednosti v grafoch, problémy s vyhľadávaním v mriežke

Dvojrozmerné pole (2D-Array)

Dvojrozmerné pole je najjednoduchšia forma viacrozmerného poľa. Dvojrozmerné pole možno pre ľahšie pochopenie vnímať ako pole jednorozmerného poľa.

Nepriama metóda vyhlásenia:

  • Vyhlásenie – Syntax:
  data_type[][] array_name = new data_type[x][y];   For example: int[][] arr = new int[10][20]; 
  • Inicializácia – syntax:
  array_name[row_index][column_index] = value;   For example: arr[0][0] = 1; 

Príklad: 1

Java




import> java.io.*;> public> class> GFG {> > public> static> void> main(String[] args)> > {> > int> [][] arr => new> int> [> 10> ][> 20> ];> > arr[> 0> ][> 0> ] => 1> ;> > System.out.println(> 'arr[0][0] = '> + arr[> 0> ][> 0> ]);> > }> }>

Výkon

arr[0][0] = 1 

Príklad: Implementácia 2D poľa so štandardnými hodnotami s maticou 4*4

Java




public> class> TwoDArray {> > public> static> void> main(String[] args) {> > int> rows => 4> ;> > int> columns => 4> ;> > int> [][] array => new> int> [rows][columns];> > int> value => 1> ;> > for> (> int> i => 0> ; i for (int j = 0; j array[i][j] = value; value++; } } System.out.println('The 2D array is: '); for (int i = 0; i for (int j = 0; j System.out.print(array[i][j] + ' '); } System.out.println(); } } }>

Výkon

The 2D array is: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 

Vysvetlenie:

  • Počet riadkov a stĺpcov sa určuje pomocou premenných riadky a stĺpce. 2D pole je vytvorené pomocou operátora new, ktorý alokuje pamäť pre pole. Veľkosť poľa je určená riadkami a stĺpcami.

Priamy spôsob deklarácie: Syntax:

  data_type[][] array_name = {     {valueR1C1, valueR1C2, ....},      {valueR2C1, valueR2C2, ....}     };   For example: int[][] arr = {{1, 2}, {3, 4}}; 

Príklad:

Java




import> java.io.*;> class> GFG {> > public> static> void> main(String[] args)> > {> > int> [][] arr = { {> 1> ,> 2> }, {> 3> ,> 4> } };> > for> (> int> i => 0> ; i <> 2> ; i++)> > for> (> int> j => 0> ; j <> 2> ; j++)> > System.out.println(> 'arr['> + i +> ']['> + j +> '] = '> > + arr[i][j]);> > }> }>

Výkon

arr[0][0] = 1 arr[0][1] = 2 arr[1][0] = 3 arr[1][1] = 4 

Prístup k prvkom dvojrozmerných polí

Prvky v dvojrozmerných poliach sa bežne označujú ako x[i][j] kde „i“ je číslo riadku a „j“ je číslo stĺpca.

Syntax:

x[row_index][column_index] 

Napríklad:

int[][] arr = new int[10][20]; arr[0][0] = 1; 

Vyššie uvedený príklad predstavuje prvok prítomný v prvom riadku a prvom stĺpci. Poznámka : V poliach, ak je veľkosť poľa N. Jeho index bude od 0 do N-1. Preto pre riadok_index 2 je skutočný počet riadkov 2+1 = 3. Príklad:

Java




import> java.io.*;> class> GFG {> > public> static> void> main(String[] args)> > {> > int> [][] arr = { {> 1> ,> 2> }, {> 3> ,> 4> } };> > System.out.println(> 'arr[0][0] = '> + arr[> 0> ][> 0> ]);> > }> }>

Výkon

arr[0][0] = 1 

Reprezentácia 2D poľa v tabuľkovom formáte:

Dvojrozmerné pole možno vnímať ako tabuľku s „x“ riadkami a „y“ stĺpcami, kde počet riadkov je v rozsahu od 0 do (x-1) a počet stĺpcov je v rozsahu od 0 do (y-1). Nižšie je zobrazené dvojrozmerné pole „x“ s 3 riadkami a 3 stĺpcami:

dva-d

Tlač 2D poľa v tabuľkovom formáte:

Na výstup všetkých prvkov dvojrozmerného poľa použite vnorené slučky for. Na to sú potrebné dve slučky for, jedna na prechádzanie riadkami a druhá na prechádzanie stĺpcami.

Príklad:

Java




import> java.io.*;> class> GFG {> > public> static> void> main(String[] args)> > {> > int> [][] arr = { {> 1> ,> 2> }, {> 3> ,> 4> } };> > for> (> int> i => 0> ; i <> 2> ; i++) {> > for> (> int> j => 0> ; j <> 2> ; j++) {> > System.out.print(arr[i][j] +> ' '> );> > }> > System.out.println();> > }> > }> }>

Výkon

1 2 3 4 

Príklad: Implementácia 2D poľa s užívateľským vstupom

Java




import> java.util.Scanner;> public> class> Main {> > public> static> void> main(String[] args)> > {> > Scanner scan => new> Scanner(System.in);> > System.out.print(> 'Enter number of rows: '> );> > int> rows = scan.nextInt();> > System.out.print(> 'Enter number of columns: '> );> > int> columns = scan.nextInt();> > int> [][] multidimensionalArray=> new> int> [rows][columns];> > // Now you can use the array like a regular> > // 2-dimensional array> > for> (> int> i => 0> ; i for (int j = 0; j multidimensionalArray[i][j]= (i + 1) * (j + 1); } } for (int i = 0; i for (int j = 0; j System.out.print(multidimensionalArray[i][j]+ ' '); } System.out.println(); } scan.close(); } }>

Výkon

Enter number of rows: 3 Enter number of columns: 3 1 2 3  2 4 6  3 6 9 
  • Tento kód vyzve používateľa, aby zadal počet riadkov a stĺpcov pre 2-rozmerné pole. Trieda Scanner sa používa na čítanie vstupu používateľa. Potom vytvorí 2-rozmerné pole celých čísel so zadaným počtom riadkov a stĺpcov a každému prvku poľa priradí i*j.
  • Ak chcete vytvoriť viacrozmerné pole s viac ako dvoma rozmermi, môžete použiť rovnaký prístup k vytvoreniu poľa polí. Ak chcete napríklad vytvoriť 3-rozmerné pole, môžete vytvoriť pole 2-rozmerných polí.

Trojrozmerné pole (3D-Array)

Trojrozmerné pole je komplexná forma viacrozmerného poľa. Trojrozmerné pole možno pre ľahšie pochopenie vnímať ako pole dvojrozmerného poľa.

Nepriamy spôsob vyhlásenia:

  • Vyhlásenie – Syntax:
  data_type[][][] array_name = new data_type[x][y][z];   For example: int[][][] arr = new int[10][20][30]; 
  • Inicializácia – syntax:
  array_name[array_index][row_index][column_index] = value;   For example: arr[0][0][0] = 1; 

Príklad:

Java




import> java.io.*;> class> GFG {> > public> static> void> main(String[] args)> > {> > int> [][][] arr => new> int> [> 10> ][> 20> ][> 30> ];> > arr[> 0> ][> 0> ][> 0> ] => 1> ;> > System.out.println(> 'arr[0][0][0] = '> + arr[> 0> ][> 0> ][> 0> ]);> > }> }>

Výkon

arr[0][0][0] = 1 

Priamy spôsob deklarácie: Syntax:

  data_type[][][] array_name = {     {     {valueA1R1C1, valueA1R1C2, ....},      {valueA1R2C1, valueA1R2C2, ....}     },     {     {valueA2R1C1, valueA2R1C2, ....},      {valueA2R2C1, valueA2R2C2, ....}     }     };   For example: int[][][] arr = { {{1, 2}, {3, 4}}, {{5, 6}, {7, 8}} }; 

Príklad:

Java




import> java.io.*;> class> GFG {> > public> static> void> main(String[] args)> > {> > int> [][][] arr = { { {> 1> ,> 2> }, {> 3> ,> 4> } }, { {> 5> ,> 6> }, {> 7> ,> 8> } } };> > for> (> int> i => 0> ; i <> 2> ; i++)> > for> (> int> j => 0> ; j <> 2> ; j++)> > for> (> int> z => 0> ; z <> 2> ; z++)> > System.out.println(> 'arr['> + i> > +> ']['> > + j +> ']['> > + z +> '] = '> > + arr[i][j][z]);> > }> }>

Výkon

arr[0][0][0] = 1 arr[0][0][1] = 2 arr[0][1][0] = 3 arr[0][1][1] = 4 arr[1][0][0] = 5 arr[1][0][1] = 6 arr[1][1][0] = 7 arr[1][1][1] = 8 

Prístup k prvkom trojrozmerných polí

Prvky v trojrozmerných poliach sa bežne označujú ako x[i][j][k] kde „i“ je číslo poľa, „j“ je číslo riadku a „k“ je číslo stĺpca.

Syntax:

x[array_index][row_index][column_index] 

Napríklad:

int[][][] arr = new int[10][20][30]; arr[0][0][0] = 1; 

Vyššie uvedený príklad predstavuje prvok prítomný v prvom riadku a prvom stĺpci prvého poľa v deklarovanom 3D poli.

Poznámka : V poliach, ak je veľkosť poľa N. Jeho index bude od 0 do N-1. Preto pre riadok_index 2 je skutočný počet riadkov 2+1 = 3.

Príklad:

Java




import> java.io.*;> class> GFG {> > public> static> void> main(String[] args)> > {> > int> [][][] arr = { { {> 1> ,> 2> }, {> 3> ,> 4> } }, { {> 5> ,> 6> }, {> 7> ,> 8> } } };> > System.out.println(> 'arr[0][0][0] = '> + arr[> 0> ][> 0> ][> 0> ]);> > }> }>

Výkon

arr[0][0][0] = 1 

Reprezentácia 3D poľa v tabuľkovom formáte:

Trojrozmerné pole možno vnímať ako tabuľku polí s „x“ riadkami a „y“ stĺpcami, kde počet riadkov je v rozsahu od 0 do (x-1) a počet stĺpcov je v rozsahu od 0 do (y-1). Trojrozmerné pole s 3 poľami obsahujúcimi 3 riadky a 3 stĺpce je zobrazené nižšie:

Tlač 3D poľa v tabuľkovom formáte:

Na výstup všetkých prvkov trojrozmerného poľa použite vnorené slučky for. Na to sú potrebné tri cykly for, jeden na prechádzanie poľami, druhý na prechádzanie riadkami a ďalší na prechádzanie stĺpcami.

Príklad:

Java




import> java.io.*;> class> GFG {> > public> static> void> main(String[] args)> > {> > int> [][][] arr = { { {> 1> ,> 2> }, {> 3> ,> 4> } },> > { {> 5> ,> 6> }, {> 7> ,> 8> } } };> > for> (> int> i => 0> ; i <> 2> ; i++) {> > for> (> int> j => 0> ; j <> 2> ; j++) {> > for> (> int> k => 0> ; k <> 2> ; k++) {> > System.out.print(arr[i][j][k] +> ' '> );> > }> > System.out.println();> > }> > System.out.println();> > }> > }> }>

Výkon

1 2 3 4 5 6 7 8 

Vloženie viacrozmerného poľa počas spustenia:

Táto téma je nútená brať užívateľom definovaný vstup do viacrozmerného poľa počas behu. Zameriava sa na to, že používateľ najprv zadá všetky vstupy do programu počas behu programu a po všetkých zadaných vstupoch program poskytne výstup vzhľadom na každý vstup. Je to užitočné, keď používateľ chce najskôr zadať vstup pre viacero testovacích prípadov s viacerými rôznymi hodnotami a po vykonaní všetkých týchto vecí začne program poskytovať výstup. Ako príklad nájdime celkový počet párnych a nepárnych čísel vo vstupnom poli. Tu použijeme koncept 2-rozmerného poľa.

Tu je niekoľko bodov, ktoré vysvetľujú použitie rôznych prvkov v nadchádzajúcom kóde:

  • Číslo riadka sa považuje za počet testovacích prípadov a hodnoty stĺpca sa považujú za hodnoty v každom testovacom prípade.
  • Jeden cyklus for() sa používa na aktualizáciu čísla testovacieho prípadu a ďalší cyklus for() sa používa na prevzatie príslušných hodnôt poľa.
  • Po vykonaní všetkých vstupných vstupov sa opäť použijú dve slučky for() rovnakým spôsobom na vykonanie programu podľa špecifikovanej podmienky.
  • Prvý riadok vstupu je celkový počet testovacích prípadov.
  • Druhý riadok zobrazuje celkový počet hodnôt prvého poľa.
  • Tretí riadok uvádza hodnoty poľa atď.

Implementácia:

Java




import> java.io.*;> import> java.util.Scanner;> class> GFGTestCase {> > public> static> void> main(String[] args)> > {> > // Scanner class to take> > // values from console> > Scanner scanner => new> Scanner(System.in);> > // totalTestCases = total> > // number of TestCases> > // eachTestCaseValues => > // values in each TestCase as> > // an Array values> > int> totalTestCases, eachTestCaseValues;> > // takes total number of> > // TestCases as integer number> > totalTestCases = scanner.nextInt();> > // An array is formed as row> > // values for total testCases> > int> [][] arrayMain => new> int> [totalTestCases][];> > // for loop to take input of> > // values in each TestCase> > for> (> int> i => 0> ; i eachTestCaseValues = scanner.nextInt(); arrayMain[i] = new int[eachTestCaseValues]; for (int j = 0; j arrayMain[i][j] = scanner.nextInt(); } } // All input entry is done. // Start executing output // according to condition provided for (int i = 0; i // Initialize total number of // even & odd numbers to zero int nEvenNumbers = 0, nOddNumbers = 0; // prints TestCase number with // total number of its arguments System.out.println('TestCase ' + i + ' with ' + arrayMain[i].length + ' values:'); for (int j = 0; j System.out.print(arrayMain[i][j] + ' '); // even & odd counter updated as // eligible number is found if (arrayMain[i][j] % 2 == 0) { nEvenNumbers++; } else { nOddNumbers++; } } System.out.println(); // Prints total numbers of // even & odd System.out.println( 'Total Even numbers: ' + nEvenNumbers + ', Total Odd numbers: ' + nOddNumbers); } } } // This code is contributed by Udayan Kamble.>

Výkon:

  Input:  2 2 1 2 3 1 2 3    Output:  TestCase 0 with 2 values: 1 2  Total Even numbers: 1, Total Odd numbers: 1 TestCase 1 with 3 values: 1 2 3  Total Even numbers: 1, Total Odd numbers: 2    Input:  3 8 1 2 3 4 5 11 55 66 5 100 101 55 35 108 6 3 80 11 2 1 5    Output:  TestCase 0 with 8 values: 1 2 3 4 5 11 55 66  Total Even numbers: 3, Total Odd numbers: 5 TestCase 1 with 5 values: 100 101 55 35 108  Total Even numbers: 2, Total Odd numbers: 3 TestCase 2 with 6 values: 3 80 11 2 1 5  Total Even numbers: 2, Total Odd numbers: 4