Všetky akcie s dvojrozmernými poľami v jazyku Java. Užitočné materiály o poliach. Hlavná vec o poliach

  • 29.04.2019

1. Čo sú polia?

Ide o špeciálnu štruktúru, ktorá existuje takmer v každom programovacom jazyku a ktorá vám umožňuje opísať skupinu objektov rovnakého typu pomocou spoločného názvu.

Povedzme, že máte útulok pre zvieratá s piatimi mačkami. Nepamätáte si meno každého, ale každý má žetón s číslom, ktoré vám umožní identifikovať každé zviera. Môžeme povedať, že toto je pole „pečatí“ veľkosti päť. Upozorňujeme, že indexovanie začína na nule – takto sa to robí v Jave. Ak by nebolo možné vytvárať polia, bolo by potrebné deklarovať päť premenných a vymýšľať im názvy, čo nie je príliš pohodlné.

V Jave môžete vytvárať polia ľubovoľnej dimenzie – jednorozmerné, dvojrozmerné, trojrozmerné atď. Začnime s najjednoduchšou možnosťou - jednorozmerné polia.

2. Jednorozmerné polia

Jednorozmerné polia sú zoznamom premenných rovnakého typu. Ak chcete vytvoriť pole, musíte najprv deklarovať premennú poľa požadovaného typu. Všeobecná forma deklarovania jednorozmerného poľa vyzerá takto nasledujúcim spôsobom:

Zadajte názov premennej;

kde parameter Typ označuje typ prvku poľa, nazývaný aj základný typ.

Príklad 1. Príklad deklarovania polí

Hranaté zátvorky môžu byť umiestnené pred alebo za premennou. Ale viac správna možnosť uvažuje sa s uvedením zátvoriek pred premennou - typ a zátvorky sú tak na jednom mieste, čo vám na prvý pohľad umožní pochopiť, že máte pred sebou pole takého a takého typu.

Int monthDays; dvojitý mesiacPlaty;

2.1. Inicializácia poľa pomocou kľúčového slova Nový

Keď je pole deklarované, ešte mu nebola pridelená žiadna pamäť. Na pridelenie pamäte pre pole použite kľúčové slovo Nový, potom sa znova uvedie typ poľa a veľkosť v hranatých zátvorkách:

Názov premennej = nový typ [veľkosť];

Pole môže byť deklarované a inicializované jedným riadkom:

Hodnoty Int = new int;

Príklad 2. Príklad deklarácie poľa

Uvažujme o príklade deklarovania poľa typu int veľkosť 12 by tento príklad... Po vykonaní riadku int mesiacDni = nový int bolo vytvorené pole 12 prvkov. Každému prvku je priradená predvolená hodnota pre zadaný typ. Pre typ int toto je nula. Kontaktovať individuálny prvok pole za názvom poľa v hranatých zátvorkách nastavíme index prvku. Môžeme teda odkazovať na prvok poľa, aby sme zmenili alebo získali jeho hodnotu.

Verejná trieda Array1 (public static void main (String args) (int monthDays = nový int; monthDays = 31; monthDays = 28; monthDays = 31; monthDays = 30; monthDays = 31; monthDays = 30; monthDays = 30; monthDays = 3y1 montha1Days ; monthDays = 30; monthDays = 31; monthDays = 30; monthDays = 31; System.out.println ("B apríl" + mesiacDni + "dni.");))

2.2. Inicializácia poľa pomocou inicializačného bloku

Príklad 3. Príklad inicializácie jednorozmerného poľa

Ak vopred poznáte hodnoty pre každý prvok v poli, môžete pole inicializovať pomocou bloku. Namiesto new int, v kučeravé zátvorky hodnoty prvkov poľa sú uvedené oddelené čiarkami. Veľkosť poľa kompilátor odvodí z počtu zadaných prvkov.

Public class Array2 (public static void main (String args) (int monthDays = (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31); System.out.println ("B Apríl "+ mesiacDni +" dni. ");))

2.3. Nepomenované pole

Existuje aj tretia forma deklarácie poľa – nepomenované pole. Dá sa použiť dvoma spôsobmi. Najprv ste deklarovali a inicializovali pole testScores veľkosť štyri , ale potom sa z nejakého dôvodu musí zmeniť – musí obsahovať tri prvky. Formulár nemôžete znova použiť na inicializáciu poľa - dôjde k chybe kompilácie:

Int testScores = (1, 2, 3, 4); ... testScores = (4, 7, 2); // chyba kompilácie

Ale dá sa použiť nepomenované pole, ktoré vytvorí nové pole na mysli. Forma zápisu nepomenovaného poľa je kombináciou prvých dvoch:

TestScores = new int (4, 7, 2);

Druhý prípad použitia pre nepomenované pole je pri odovzdávaní poľa metóde. V nasledujúcom príklade metóda vytlačiť akceptuje pole typu ako vstup int. Pri volaní metódy možno ako argument odovzdať nepomenované pole.

Príklad 4. Príklad nepomenovaného poľa

public class Array3 (public static void main (String args) (int testScores = (1, 2, 3, 4); for (int element: testScores) (System.out.print (element + "");) System.out .println (); testScores = new int (4, 7, 2); for (prvok int: testScores) (System.out.print (prvok + ""));) System.out.println (); print (new int (4, 6, 2, 3));) public static void print (pole int) (pre (prvok int: pole) (System.out.print (prvok + "");)))

3. Viacrozmerné polia

Viacrozmerné polia sú polia polí.

Pri deklarovaní premennej viacrozmerného poľa sa na označenie každého ďalšieho indexu používa samostatný rad hranatých zátvoriek. Napríklad:

Int twoD = new int;

Nasledujúci obrázok ukazuje, ako môžete vizuálne reprezentovať dvojrozmerné pole 4 x 5. Ľavý index definuje riadok a pravý stĺpec.

Príklad 5. Príklad dvojrozmerného poľa

Nasledujúci príklad ukazuje, ako môžete nastaviť hodnoty v dvojrozmernom poli 4x5. Vonkajšia slučka sa používa na iteráciu cez reťazce pre, iterovať cez stĺpce - interné. Každému ďalšia položka hodnota je priradená o jednu väčšiu ako predchádzajúca.

Verejná trieda TwoDArray1 (public static void main (String args) (int twoD = new int; int i, j, k = 0; for (i = 0; i< 4; i++) { for (j = 0; j < 5; j++) { twoD[i][j] = k++; System.out.print(twoD[i][j] + " "); } System.out.println(); } } }

3.2 Reprezentácia viacrozmerného poľa v pamäti

Teraz sa pozrime, ako je pole reprezentované. int twoD = new int; v pamäti.Premenné dvaD neukazuje na maticu, ale na riadok (červený) pozostávajúci z troch prvkov. Hodnota každej položky je odkaz na reťazec štyroch položiek (fialový).

Nasledujúci obrázok ukazuje, ako sa ukladá trojrozmerné pole. int triD = nový int na mysli:

Podobne je možné do pamäte uložiť pole ľubovoľného rozmeru.

V dvojrozmerných poliach, na ktoré sme sa doteraz pozreli, je počet prvkov v každom riadku rovnaký – najčastejšie je. Ale to nie je nutné, každý riadok môže obsahovať iná suma prvkov. Napríklad:

Príklad 6. Príklad dvojrozmerného poľa s rôznymi rozmermi

Pozrime sa na kód, ktorý implementuje takéto pole. Pri deklarovaní poľa je potrebné nastaviť počet prvkov iba pre prvý rozmer - int pole = new int... Uvádzame teda počet riadkov v poli, ale nevyčleňujeme pamäť pre každý riadok. Ďalej alokujeme samostatnú pamäť pre každý riadok poľa. Napríklad reťazec s indexom nula bude mať veľkosť 1 - pole = new int.

Verejná trieda TwoDArray2 (public static void main (String args) (int array = new int; array = new int; array = new int; array = new int; array = new int; int i, j, k = 0; for ( i = 0;< 4; i++) { for (j = 0; j < i + 1; j++) { array[i][j] = k++; System.out.print(array[i][j] + " "); } System.out.println(); } } }

3.4. Blok na inicializáciu viacrozmerného poľa

Príklad 7. Inicializácia dvojrozmerného poľa

Pre viacrozmerné polia môžete použiť aj inicializačný blok, ak sú vopred známe hodnoty všetkých prvkov. Každý jednotlivý riadok je uzavretý v zložených zátvorkách:

Verejná trieda TwoDArray3 (public static void main (String args) (dvojité poleTwoD = ((0, 1, 2, 3), (4, 5, 6, 7), (8, 9, 10, 11), (12, 13, 14, 15)); for (double arrayOneD: arrayTwoD) (for (double element: arrayOneD) (System.out.print (element + ""));) System.out.println ();)))

3.4. Dĺžka poľa

Príklad 8. Získanie dĺžky poľa

Nasledujúci príklad ukazuje, ako získať dĺžku poľa. Na tento účel sa používa premenná dĺžka... Pri jednorozmernom poli je všetko jasné - jeho dĺžka je počet jeho prvkov. Dĺžka viacrozmerného poľa je počet prvkov v jeho prvom rozmere. Napríklad dĺžka poľa pole2 je 2. Môžete tiež získať dĺžku každého riadku v poli. Napríklad, pole2.dĺžka- vráti počet prvkov v reťazci s indexom nula.

Verejná trieda ArraySize (public static void main (String args) (int pole1 = (1, 2, 3, 4); int pole2 = ((1, 1, 1), (2, 2, 2)); System.out .println ("Veľkosť poľa1 =" + pole1.dĺžka); System.out.println ("Veľkosť poľa2 =" + pole2.dĺžka); System.out.println ("Veľkosť 1-riadka poľa pole2 =" + pole2 .dĺžka);))

Výsledok vykonania:

Veľkosť poľa pole1 = 4 Veľkosť poľa pole2 = 2 Veľkosť 1-riadku poľa pole2 = 3

4. Užitočné metódy pri práci s poliami

Existuje množstvo metód, ktoré sú užitočné pri práci s poľami. Zvážme ich:

4.1. Metóda Arrays.toString ()

Metóda vracia reťazcovú reprezentáciu jednorozmerného poľa, pričom prvky oddeľuje čiarkou. Namiesto cyklovania cez polia pre ako sme to urobili v príklade 4, môžete použiť túto metódu na výstup položiek do konzoly:

Príklad 9. Aplikácia spôsobu Arrays.toString ()

import java.util.Arrays; public class ArraysToStringDemo (public static void main (String args) (int pole = (1, 4, 6, 3, 8); System.out.println (Arrays.toString (pole));))

4.2. Metóda Arrays.deepToString ()

Metóda vracia reťazcovú reprezentáciu viacrozmerného poľa, pričom reťazce uzatvára do hranatých zátvoriek:

Príklad 10. Aplikácia spôsobu Arrays.deepToString ()

import java.util.Arrays; public class ArraysDeepToStringDemo (public static void main (String args) (String pole = (("jeden-jeden", "jeden-dva", "jeden-tri"), ("dva-jeden", "dva-dva", "dva-tri")); System.out.println (Arrays.deepToString (pole));))

4.3. Metóda Arrays.sort ()

Metóda Arrays.sort () triedi prvky číselného poľa vo vzostupnom poradí:

Príklad 11. Triedenie poľa

import java.util.Arrays; public class ArraysSort1 (public static void main (String args) (int pole = new int (3, 1, 5, 6, 8); Arrays.sort (pole); System.out.println (Arrays.toString (pole)) ;))

4.4. Metóda Arrays.binarySearch ()

Metóda Arrays.binarySearch () vyhľadá v poli danú hodnotu a vráti číslo prvku. Ak sa požadovaný prvok nenájde, vráti sa - (pozícia + 1), kde pozíciu- poloha prvku, kde MOHOL BYŤ. Pole musí byť zoradené, inak bude výsledok volania metódy nedefinovaný:

Príklad 12. Nájdenie prvku poľa

import java.util.Arrays; public class BinarySearch1 (public static void main (String args) (int pole1 = (10, 20, 30, 40); int pos1 = Arrays.binarySearch (pole1, 20); int pos2 = Arrays.binarySearch (pole1, 25); System.out.println (pos1); System.out.println (pos2);))

Výsledok vykonania:

4.5. Metóda System.arraycopy ()

Metóda System.arraycopy () umožňuje skopírovať časť poľa do iného poľa.

Príklad 13. Kopírovanie poľa

Zvážte príklad kopírovania prvkov 2,3,4 z poľa arraySource do poľa arrayDestination:

Importovať java.util.Arrays; public class ArrayCopy1 (public static void main (String args) (int arraySource = (1, 2, 3, 4, 5, 6); int arrayDestination = (0, 0, 0, 0, 0, 0, 0, 0) ; System.out.println ("arraySource:" + Arrays.toString (arraySource)); System.out.println ("arrayDestination:" + Arrays.toString (arrayDestination)); System.arraycopy (arraySource, 1, arrayDestination, 2 , 3); System.out.println ("arrayDestination after arrayCopy:" + Arrays.toString (arrayDestination));))

Výsledok vykonania:

ArraySource: arrayDestination: arrayDestination after arrayCopy:

Príklad 14. Kopírovanie poľa zo seba do seba

Možno skopírovať do rovnakého poľa s prekrývajúcimi sa oblasťami:

Importovať java.util.Arrays; public class ArrayCopy2 (public static void main (String args) (int pole = (1, 2, 3, 4, 5, 6, 7, 8); System.out.println (Arrays.toString (pole)); System. arraycopy (pole, 1, pole, 3, 3); System.out.println (Arrays.toString (pole));))

Výsledok vykonania:

Predstavte si skrinku v sklade. Každý z nich má svoje vlastné číslo a v každom z nich je uložený nejaký predmet „Baggage“. Alebo vínny lístok, v ktorom sú všetky druhy vína očíslované a pri objednávke stačí povedať číslo nápoja. Alebo zoznam študentov v skupine, v ktorej prvá bunka bude obsahovať študenta "Andreev" a posledná - "Yakovlev". Alebo zoznam cestujúcich v lietadle, z ktorých každý má pridelené sedadlo určitý počet... V Jave sa na prácu s takýmito štruktúrami často používajú polia, teda množina homogénnych údajov.

Čo je pole?

Pole je dátová štruktúra, ktorá ukladá prvky rovnakého typu. Možno si to predstaviť ako množinu očíslovaných buniek, z ktorých do každej môžete vložiť nejaké údaje (jedna údajová položka do jednej bunky). Prístup do konkrétnej bunky sa vykonáva prostredníctvom jej čísla. Číslo prvku v poli sa tiež nazýva index... V prípade Javy pole homogénne, to znamená, že prvky rovnakého typu budú uložené vo všetkých jeho bunkách. Pole celých čísel teda obsahuje iba celé čísla (napr. typu int), pole reťazcov - iba reťazce, pole prvkov triedy Dog, ktoré sme vytvorili, bude obsahovať iba objekty Dog. To znamená, že v Jave nemôžeme vložiť celé číslo do prvej bunky poľa, reťazec do druhej a „pes“ do tretej.

Vyhlásenie poľa

Ako vyhlásim pole?

Ako každá premenná, aj pole v jazyku Java musí byť deklarované. To možno vykonať jedným z dvoch spôsobov. Sú si rovní, ale ten prvý je vhodnejší pre Java štýl. Druhým je dedičstvo jazyka C (veľa programátorov jazyka C prešlo na Javu a pre ich pohodlie alternatívny spôsob). Tabuľka ukazuje obidva spôsoby deklarovania poľa v jazyku Java: V oboch prípadoch je dataType typom premenných v poli. V príkladoch sme deklarovali dve polia. Jeden bude uchovávať celé čísla typu int, druhý - objekty typu Object. Pri deklarovaní poľa má teda názov a typ (typ premenné poľa). ArrayName je názov poľa.

Vytváranie poľa

Ako vytvorím pole?

Ako každý iný objekt môžete vytvoriť pole Java, to znamená vyhradiť preň miesto v pamäti pomocou operátora new. Robí sa to takto: new typeOfArray [dĺžka]; Kde typeOfArray je typ poľa a dĺžka je jeho dĺžka (t. j. počet buniek) vyjadrená v celých číslach (int). Tu sme však alokovali pamäť len pre pole, ale nenaviazali sme vytvorené pole na žiadnu predtým deklarovanú premennú. Zvyčajne je pole najprv deklarované a potom vytvorené, napríklad: int myArray; // deklarácia poľa myArray = new int [10]; // vytvoríme, teda alokáciu pamäte pre pole 10 prvkov typu int Tu sme deklarovali pole celých čísel s názvom myArray a potom sme povedali, že pozostáva z 10 buniek (z ktorých každá bude uchovávať nejaký druh celého čísla). Oveľa častejšie sa však pole vytvára hneď po deklarácii pomocou tejto skrátenej syntaxe: int mojePole = new int [10]; // deklarácia a pridelenie pamäte "v jednej fľaši" Poznámka: Po vytvorení poľa s pomocou nového, jeho bunky obsahujú predvolené hodnoty. Pre číselné typy (ako v našom príklade) to bude 0, pre boolean - nepravda, pre referenčné typy - null. Po operácii teda int myArray = new int [10]; dostaneme pole desiatich celých čísel a kým sa to v priebehu programu nezmení, do každej bunky sa zapíše 0.

Dĺžka poľa v jazyku Java

Ako sme povedali vyššie, dĺžka poľa je počet prvkov, pre ktoré je pole navrhnuté. Dĺžku poľa nie je možné po jeho vytvorení zmeniť. Poznámka: v prvky Java polia sú číslované od nuly. To znamená, že ak máme pole s 10 prvkami, potom prvý prvok poľa bude mať index 0 a posledný - 9. K dĺžke poľa môžete pristupovať pomocou premennej dĺžky. Príklad: int mojePole = new int [10]; // vytvoríme 10-prvkové pole celých čísel a pomenujeme ho myArray systém. von. println (dĺžka myArray); // vypíše do konzoly dĺžku poľa, teda počet prvkov, ktoré môžeme do poľa vložiť Výstup z programu: 10

Inicializácia poľa a prístup k jeho prvkom

Ako vytvoriť pole v Jave je už jasné. Po tomto postupe dostaneme č prázdne pole a pole vyplnené predvolenými hodnotami. Napríklad v prípade int to bude 0 a ak máme pole s údajmi referenčného typu, štandardne sa do každej bunky zapíše null. K prvku poľa pristupujeme (to znamená, že doň zapíšeme hodnotu alebo ju zobrazíme na obrazovke alebo s ňou urobíme nejakú operáciu) pomocou jeho indexu. Inicializácia poľa znamená jeho naplnenie špecifickými údajmi (nie predvolené). Príklad: vytvorme pole 4 ročných období a naplňte ho hodnotami reťazca - názvami týchto ročných období. String seasons = new String [4]; / * deklaroval a vytvoril pole. Java pridelila pamäť pre pole 4 riadkov a teraz obsahuje každá bunka nulový(keďže reťazec je typ odkazu) * / ročné obdobia [0] = "zima"; / * do prvej bunky, teda do bunky s nulovým číslom, sme napísali reťazec Winter. Tu pristúpime k nulovému prvku poľa a zapíšeme tam konkrétnu hodnotu * / ročné obdobia [1] = "jar"; // urobte rovnaký postup s bunkou číslo 1 (sekunda) ročné obdobia [2] = "Leto"; // ... číslo 2 sezóny [3] = "Jeseň"; // a s posledným číslom 3 Teraz vo všetkom štyri bunky naše pole obsahuje názvy ročných období. Inicializácia môže byť vykonaná aj inak, v kombinácii s inicializáciou a deklaráciou: String seasons = new String („Zima“, „Jar“, „Leto“, „Jeseň“); navyše operátor nový možno vynechať: String seasons = ("Zima", "Jar", "Leto", "Jeseň");

Ako zobrazím pole v jazyku Java?

Prvky poľa môžete zobraziť na obrazovke (teda v konzole) napríklad pomocou pre slučku... Ešte jeden, viac krátka cesta o zobrazení poľa na obrazovke sa bude diskutovať v odseku „. Zatiaľ sa pozrime na príklad s cyklovaním poľa: String seasons = new String ("Zima", "Jar", "Leto", "Jeseň"); pre (int i = 0; i< 4 ; i++ ) { System. out. println (seasons[ i] ) ; } V dôsledku toho program vytlačí nasledujúci výsledok: Zima jar leto jeseň

Jednorozmerné a viacrozmerné polia Java

Ale čo ak chceme vytvoriť nie pole čísel, pole reťazcov alebo pole nejakých objektov, ale pole polí? Java vám to umožňuje. Pole, ktoré je nám už známe, int myArray = new int je takzvané jednorozmerné pole. A pole polí sa nazýva dvojrozmerné. Je to ako tabuľka, ktorá má číslo riadku a číslo stĺpca. Alebo, ak ste sa naučili začiatky lineárnej algebry, na matici. Na čo sú takéto polia? Najmä na programovanie rovnakých matíc a tabuliek, ako aj objektov, ktoré sa im podobajú v štruktúre. Napríklad šachové hracie pole môže byť špecifikované ako pole 8x8. Viacrozmerné pole je deklarované a vytvorené nasledovne: Int myTwoDimentionalArray = new int [8] [8]; Toto pole má presne 64 prvkov: myTwoDimentionalArray, myTwoDimentionalArray, myTwoDimentionalArray, myTwoDimentionalArray atď. až po myTwoDimentionalArray. Ak s ním teda reprezentujeme šachovnicu, potom A1 bude myDwoDimentionalArray a E2 bude mojeDwoDimentionalArray. Kde sú dvaja, tam sú traja. V jazyku Java môžete zadať pole polí ... pole polí polí atď. Pravda, trojrozmerné a viac polí sa používajú veľmi zriedkavo. Pomocou trojrozmerného poľa však môžete naprogramovať napríklad Rubikovu kocku.

Užitočné metódy pre prácu s poliami

Pre prácu s poľami v Jave existuje trieda java.util.Arrays (pole v angličtine znamená „polia“). Vo všeobecnosti sa s poľami najčastejšie vykonávajú tieto operácie: plnenie prvkami (inicializácia), získanie prvku (podľa čísla), triedenie a vyhľadávanie. Vyhľadávanie a triedenie polí je samostatná téma. Na jednej strane je veľmi užitočné si sami precvičiť a napísať niekoľko vyhľadávacích a triediacich algoritmov. Na druhej strane všetci lepšie spôsoby sú už napísané a zahrnuté v knižniciach Java a možno ich legálne používať.

Články na vyhľadávanie a triedenie:

Triedenie a vyhľadávanie v kurze CS50:

Tu sú tri užitočné metódy túto triedu

Triedenie poľa

Metóda void sort (int myArray, int fromIndex, int toIndex) triedi pole celých čísel alebo jeho podpole vo vzostupnom poradí.

Hľadanie poľa pre požadovaný prvok

int binarySearch (int myArray, int fromIndex, int toIndex, int key). Táto metóda hľadá kľúčový prvok v už zoradené pole myArray alebo podpolie z fromIndex do toIndex. Ak sa nenájde žiadna položka, vráti číslo položky alebo z Index-1.

Previesť pole na reťazec

Metóda String toString (int myArray) skonvertuje pole na reťazec. Ide o to, že v Java polia neprepisujú toString (). To znamená, že ak sa pokúsite vytlačiť celé pole (a nie po prvkoch, ako v odseku „“) priamo na obrazovku (System.out.println (myArray)), dostanete názov triedy a hexadecimálny hash kód poľa (definuje ho Object.toString ()). Ak ste začiatočník, možno nerozumiete vysvetleniu metódy toString. V prvej fáze to nie je potrebné, ale pomocou tejto metódy sa zjednoduší výstup poľa. Java uľahčuje zobrazenie poľa na obrazovke bez použitia slučky. Toto je diskutované v príklade nižšie.

Príklad na triedenie, binárne vyhľadávanie a toString

Vytvorme pole celých čísel, zobrazme ho pomocou toString, zoraďme ho pomocou metódy triedenia a nájdime v ňom nejaké číslo. class Main (public static void main (String args) (int pole = (1, 5, 4, 3, 7); // deklarovať a inicializovať pole systém. von. println (pole); // pokus o zobrazenie nášho poľa na obrazovke bez metódy toString - dostaneme hexadecimálne číslo// vytlačí pole "správne" Polia. triediť (pole, 0, 4); // zoradí celé pole od nuly po štvrté systém. von. println (Polia. toString (pole)); // zobrazenie zoradeného poľa na obrazovke int kľúč = polia. binárne vyhľadávanie (pole, 5); // hľadá kľúč - číslo 5 v zoradenom poli. // metóda binarySearch vráti index prvku zoradeného poľa, v ktorom je "skryté" požadované číslo systém. von. println (kľúč); // vytlačí index požadovaného čísla systém. von. println (Polia. binarySearch (pole, 0)); // a teraz skúsme nájsť číslo, ktoré nie je v poli, // a okamžite zobrazí výsledok na obrazovke } } Výstup z programu: 3 -1 Prvý riadok je pokus o zobrazenie poľa bez toString, druhý je výstup poľa pomocou toString, tretí je zoradené pole, štvrtý je index požadovaného čísla 5 v zoradenom poli (nezabudnite, že počítame od nuly , takže štvrtý prvok poľa má index 3). V piatom riadku vidíme -1. Pole takýto index nemá. Výstup signalizuje, že požadovaný prvok (v v tomto prípade, 0) nie je v poli.

Hlavná vec o poliach

    Hlavné charakteristiky poľa sú: typ údajov v ňom umiestnených, názov a dĺžka.
    To posledné sa rieši pri inicializácii (pridelenie pamäte pre pole), prvé dva parametre sa určujú pri deklarovaní poľa.

    Veľkosť poľa (počet buniek) musí byť definovaná v int

    Po vytvorení poľa už nemôžete zmeniť jeho dĺžku.

    K prvku poľa možno pristupovať pomocou jeho indexu.

    V poliach, ako aj inde v Jave, sú prvky číslované od nuly.

    Po procedúre vytvorenia poľa sa pole naplní predvolenými hodnotami.

    Postavte sa jazyk Java výrazne odlišné od poľa v C ++. Je to však prakticky to isté ako ukazovateľ na dynamické pole.

Užitočné materiály o poliach

Chcete sa dozvedieť viac o poliach? Pozrite si články nižšie. Na túto tému je veľa zaujímavých a užitočných informácií.

    Pekný podrobný článok o poliach

    Tento článok popisuje niektoré metódy triedy Array

    Prvá prednáška v CodeGyme o poliach.

Posledná aktualizácia: 09.11.2018

Pole predstavuje množinu hodnôt rovnakého typu. Deklarovanie poľa je ako deklarácia bežnej premennej, ktorá ukladá jednu hodnotu a existujú dva spôsoby, ako deklarovať pole:

Data_type názov poľa; // buď dátový typ názov_pola;

Napríklad definujme pole čísel:

Int nums; int nums2;

Po deklarovaní poľa ho môžeme inicializovať:

Int nums; nums = new int; // pole 4 čísel

Pole je vytvorené pomocou nasledujúcej konštrukcie: new data_type [number_of_elements], kde new je kľúčové slovo, ktoré alokuje pamäť pre počet prvkov uvedený v zátvorkách. Napríklad nums = new int; - tento výraz vytvorí pole štyroch prvkov int a každý prvok bude mať predvolenú hodnotu 0.

Môžete ho tiež okamžite inicializovať pri deklarovaní poľa:

Int nums = new int; // pole 4 cisel int nums2 = new int; // pole 5 čísel

Pri tejto inicializácii majú všetky prvky poľa predvolenú hodnotu. Pre číselné typy(vrátane pre typ char) je toto číslo 0, pre booleovský typ je nepravda a pre ostatné objekty je null. Napríklad pre int je predvolená hodnota 0, takže vyššie uvedené pole nums bude štyri nuly.

Môžete však tiež nastaviť špecifické hodnoty pre prvky poľa, keď ho vytvárate:

// tieto dve metódy sú ekvivalentné int nums = new int (1, 2, 3, 5); int nums2 = (1, 2, 3, 5);

Je potrebné poznamenať, že v tomto prípade nie je veľkosť poľa uvedená v hranatých zátvorkách, pretože sa vypočítava podľa počtu prvkov v zložených zátvorkách.

Po vytvorení poľa môžeme odkazovať na ktorýkoľvek z jeho prvkov pomocou indexu, ktorý sa uvádza v hranatých zátvorkách za názvom premennej poľa:

Int nums = new int; // nastavenie hodnôt prvkov poľa nums = 1; čísla = 2; čísla = 4; čísla = 100; // získame hodnotu tretieho prvku poľa System.out.println (nums); // 4

Prvky poľa sú indexované na 0, takže v tomto prípade, aby sme odkazovali na štvrtý prvok poľa, musíme použiť výraz nums.

A keďže máme pole definované len pre 4 prvky, nemôžeme sa odvolávať napríklad na šiesty prvok: nums = 5; ... Ak sa to pokúsime urobiť, dostaneme chybu.

Dĺžka poľa

Najdôležitejšia vlastnosť, ktorú polia majú, je vlastnosť length, ktorá vracia dĺžku poľa, teda počet jeho prvkov:

Int nums = (1, 2, 3, 4, 5); int dĺžka = nums.length; // 5

Často posledný index je neznámy, a dostať posledný prvok pole, môžeme použiť túto vlastnosť:

Int last = nums;

Viacrozmerné polia

Predtým sme uvažovali o jednorozmerných poliach, ktoré môžu byť reprezentované ako reťazec alebo reťazec hodnôt rovnakého typu. Ale okrem jednorozmerných polí môžu byť aj viacrozmerné. Najslávnejšie viacrozmerné pole- tabuľka predstavujúca dvojrozmerné pole:

Int nums1 = new int (0, 1, 2, 3, 4, 5); int nums2 = ((0, 1, 2), (3, 4, 5));

Vizuálne môžu byť obe polia reprezentované nasledovne:

Jednorozmerné pole nums1
2D pole nums2

Keďže pole nums2 je dvojrozmerné, áno jednoduchý stôl... Mohol byť vytvorený aj takto: int nums2 = new int; ... Počet hranatých zátvoriek označuje rozmer poľa. A čísla v zátvorkách označujú počet riadkov a stĺpcov. A tiež pomocou indexov môžeme v programe použiť prvky poľa:

// nastavíme prvok prvého stĺpca druhého riadku nums2 = 44; System.out.println (nums2);

Oznámenie trojrozmerné pole môže vyzerať takto:

Int nums3 = new int;

Zubaté pole

Viacrozmerné polia môžu byť tiež reprezentované ako "zubaté polia". Vo vyššie uvedenom príklade malo dvojrozmerné pole 3 riadky a tri stĺpce, takže sme skončili s rovnou tabuľkou. Každému prvku v dvojrozmernom poli však môžeme priradiť samostatné pole rôzne sumy prvky:

Int nums = new int; nums = new int; nums = new int; nums = new int;

pre každý

Špeciálna verzia cyklu for je určená na prechádzanie cez množiny prvkov, ako sú polia a kolekcie. Je to podobné ako pri akcii foreach slučka ktorý je dostupný v iných programovacích jazykoch. Jeho formálne vyhlásenie:

Pre (data_type variable_name: container) (// akcie)

Napríklad:

Int pole = new int (1, 2, 3, 4, 5); for (int i: pole) (System.out.println (i);)

V tomto prípade pole údajov typu int funguje ako kontajner. Potom je deklarovaná premenná typu int

To isté by sa dalo urobiť s bežná verzia pre:

Int pole = new int (1, 2, 3, 4, 5); pre (int i = 0; i< array.length; i++){ System.out.println(array[i]); }

Zároveň je táto verzia cyklu for flexibilnejšia z hľadiska porovnanie pre(int i: pole). Najmä v tejto verzii môžeme zmeniť prvky:

Int pole = new int (1, 2, 3, 4, 5); pre (int i = 0; i

Slučka cez viacrozmerné polia

int nums = new int ((1, 2, 3), (4, 5, 6), (7, 8, 9)); pre (int i = 0; i< nums.length; i++){ for(int j=0; j < nums[i].length; j++){ System.out.printf("%d ", nums[i][j]); } System.out.println(); }

Najprv sa vytvorí slučka na iteráciu cez riadky a potom vo vnútri prvej slučky sa vytvorí vnútorná slučka na iteráciu cez stĺpce konkrétneho riadku. Podobne môžete iterovať cez 3D polia a sady s veľkým počtom rozmerov.

Naučili sme sa vytvárať jednorozmerné polia. Podobne v Jave môžete vytvárať 2D, 3D, 4D ... inými slovami, viacrozmerné polia. Viacrozmerné pole v Jave je v podstate pole polí.

Obľúbeným príkladom použitia tohto druhu polí sú matice, ktoré sú reprezentované pomocou dvojrozmerných polí. Čo je to vlastne matica a ako ju znázorniť pomocou dvojrozmerného poľa v jazyku Java.

Matice a 2D polia v Java Baeldung

Matica je obdĺžniková tabuľka pozostávajúca z riadkov a stĺpcov, na priesečníkoch ktorých sa nachádzajú jej prvky. Počet riadkov a stĺpcov matice určuje jej veľkosť.

Celkový pohľad na veľkosť matrice m X n(m - počet riadkov, n - počet stĺpcov) , nasledovne:

Každý prvok matice má svoj vlastný index, kde prvá číslica označuje číslo riadku, na ktorom sa prvok nachádza, a druhá označuje číslo stĺpca.

Pozrime sa na príklady konkrétnych matíc a vytvorte ich pomocou Java.

Matrix A má rozmer 2 x 3 (2 riadky, 3 stĺpce). Vytvorme dvojrozmerné pole tejto dimenzie:

Int maticaA; maticaA = new int;

Deklarovali sme dvojrozmerné pole celých čísel (keďže matica v tomto prípade obsahuje celé čísla) a vyhradili sme mu pamäť. Na to sme použili 2 indexy: prvý index definuje riadok a jeho veľkosť, druhý index definuje stĺpec a jeho veľkosť.

Na prístup k prvkom dvojrozmerného poľa musíte použiť 2 indexy: prvý pre riadok, druhý pre stĺpec. Rovnako ako pri jednorozmerných poliach, aj indexy začínajú na nule. Preto číslovanie riadkov a stĺpcov v tabuľke začína od 0.

Matica A = 1; matica A = -2; matica A = 3; matica A = 4; matica A = 1; matica A = 7;

Na výstup matice do konzoly musíte prejsť všetkými prvkami pomocou dvoch slučiek. Počet cyklov pri prechode prvkami poľa sa rovná jeho rozmeru. V našom prípade sa prvá slučka vykonáva po riadkoch, druhá po stĺpcoch.

Pre (int i = 0; i< 2; i++) { for (int j = 0; j < 3; j++) { System.out.print(matrixA[i][j] + "\t"); } System.out.println(); }

To znamená, že najprv zobrazíme všetky prvky prvého riadku, oddelíme ich tabuľkovým znakom "\ t", zalomíme riadok a zobrazíme všetky prvky druhého riadku.

Kompletný kód pre maticu A nasledovne:

Verejná trieda Matrix (public static void main (String args) (int matrixA; matrixA = new int; matrixA = 1; matrixA = -2; matrixA = 3; matrixA = 4; matrixA = 1; matrixA = 7; for (int i = 0, i< 2; i++) { for (int j = 0; j < 3; j++) { System.out.print(matrixA[i][j] + "\t"); } System.out.println(); } } }

Pre maticu B použitie zjednodušený spôsob inicializácie- v čase oznámenia. Analogicky s jednorozmernými poľami.

Int maticaB = ((-9,1,0), (4,1,1), (-2,2, -1));

Každý riadok poľa musí byť uzavretý v páre zložených zátvoriek a oddelený od seba čiarkou.

Kompletný kód pre maticu B:

Public class Matrix (public static void main (String args) (int matrixB = ((-9,1,0), (4,1,1), (-2,2, -1)); for (int i = 0, i< 3; i++) { for (int j = 0; j < 3; j++) { System.out.print(matrixB[i][j] + "\t"); } System.out.println(); } } }

Zvážte inicializácia v slučke pre dvojrozmerné pole s použitím tabuľky násobenia ako príkladu.

Verejná trieda Mult (public static void main (String args) (// vytvorte dvojrozmerné pole 10 x 10 int multiplyTab = new int; // slučka v prvej dimenzii pre (int i = 0; i< 10; i++) { // цикл по второй размерности for (int j = 0; j < 10; j++) { //инициализация элементов массива multiplyTab[i][j] = (i+1)*(j+1); //вывод элементов массива System.out.print(multiplyTab[i][j] + "\t"); } System.out.println(); } } }

Tu sa inicializácia prvkov s hodnotami tabuľky násobenia kombinuje s ich výstupom na konzolu v jednom cykle.

Viacrozmerné a asymetrické polia.

Viacrozmerné polia sa v Jave vytvárajú podobným spôsobom. Počet hranatých zátvoriek označuje rozmer.
Príklady vytvárania polí s pevnou dĺžkou:

Int a = new int; // dvojrozmerné pole int b = new int; // trojrozmerné pole int c = nové int; // štvorrozmerné pole // atď.

Na začiatku však nie je potrebné uvádzať veľkosť na všetkých úrovniach, môžete uviesť veľkosť iba na prvej úrovni.

Int a1 = new int; // dvojrozmerné pole s 5 riadkami

V tomto prípade, aj keď nie je známe, koľko prvkov bude v každom riadku, to sa dá určiť neskôr, navyše pole môže obsahovať v každom riadku iný počet prvkov, to znamená, že môže byť asymetrické... Určte počet prvkov v každom riadku pre pole a1

A1 = new int; a1 = new int; a1 = new int; a1 = new int; a1 = new int;

Výsledkom je, že pri zobrazení na obrazovke

Pre (int i = 0; i

pole bude vyzerať takto:

0
0 0
0 0 0
0 0 0 0
0 0 0 0 0

Keď je pole vytvorené, jeho prvky sa automaticky inicializujú na nuly, takže tento príklad zobrazuje nuly.

Cvičenia na viacrozmerných poliach v Jave:

  1. Vytvorte pole 5 x 6 a vyplňte ho náhodnými číslami (v rozsahu od 0 do 99). Vytlačte tretí riadok do konzoly
  2. Dané matice C a D s rozmerom 3 x 3 a vyplnené náhodnými číslami v rozsahu od 0 do 99. Vykonajte sčítanie, potom násobenie matíc medzi sebou oddelene. Výstup počiatočných matíc a výsledok výpočtov do konzoly.
  3. Spočítajte všetky prvky dvojrozmerného poľa.
  4. Dostanete dvojrozmerné pole obsahujúce záporné a kladné čísla. Zobrazte čísla tých buniek v poli, ktoré obsahujú záporné čísla.
  5. Zoraďte prvky v riadkoch dvojrozmerného poľa vo vzostupnom poradí

Štúdium "Game Developer" + zamestnanie

Java polia

Pole je dátová štruktúra, ktorá ukladá hodnoty rovnakého typu. K jedinému prvku poľa sa pristupuje pomocou celočíselného indexu. Napríklad, ak a je pole celých čísel, potom sa hodnota výrazu a [i] rovná i-temu celému číslu v poli.

Pole je deklarované nasledovne: najprv sa uvedie typ poľa, to znamená typ prvkov obsiahnutých v poli, nasleduje pár prázdnych hranatých zátvoriek a potom názov premennej. Napríklad takto sa deklaruje pole celých čísel:
int a;

Tento operátor však iba deklaruje premennú a bez toho, aby ju inicializoval skutočným poľom. Ak chcete vytvoriť pole, musíte použiť operátor new.

Tento operátor vytvorí pole 100 celých čísel. Prvky tohto poľa sú očíslované od 0 do 99 (nie od 1 do 100). Po vytvorení je možné pole naplniť napríklad pomocou slučky.

int a = nový int;
pre (int i = 0; i< 100; i++)
a [i] = i; // Vyplní pole číslami od 0 do 99.

Ak sa pokúsite získať prístup k prvku a (alebo akémukoľvek inému prvku, ktorého index je mimo rozsahu od 0 do 99) vytvorením poľa so 100 prvkami, program sa ukončí, pretože je vyvolaná výnimka súvisiaca s tým, že index poľa je mimo rozsahu. rozsah.
Ak chcete spočítať počet prvkov v poli, použite metódu MassName.
wa.dĺžka.

Napríklad,

pre (int i = 0; i< a. length; i++ System.out.println (a[i]);

Po vytvorení poľa nie je možné meniť jeho veľkosť (aj keď, samozrejme, môžete meniť jeho jednotlivé prvky). Ak potrebujete počas vykonávania programu často meniť veľkosť poľa, je lepšie použiť inú dátovú štruktúru nazývanú zoznam polí.

Pole môže byť deklarované dvoma spôsobmi:

int a;
alebo
int a;

Väčšina programátorov Java uprednostňuje prvý štýl, pretože jasnejšie oddeľuje typ poľa int (celočíselné pole) od názvu premennej.

Inicializátory polí a nepomenované polia

Jazyk Java má možnosť vytvoriť pole a súčasne ho inicializovať. Tu je príklad takejto syntaktickej konštrukcie:

int smallPrimes = (2, 3, 5, 7, 11, 13);

Upozorňujeme, že v tomto prípade nemusíte používať nového operátora. Okrem toho je dokonca možné inicializovať nepomenované pole:

new int (16, 19, 23, 29, 31, 37)

Tento výraz alokuje pamäť pre nové pole a vyplní ho číslami v zložených zátvorkách. V tomto prípade sa spočíta ich počet a podľa toho sa určí veľkosť poľa. Táto syntax je užitočná na reinicializáciu poľa bez vytvárania novej premennej. Napríklad výraz

smallPrimes = new int (17, 19, 23, 29, 31, 37);
je skratkový výraz
int anonym = (17, 19, 23, 29, 31, 37);
smailPrimes = anonymný;

Môžete vytvoriť pole veľkosti nula. Takéto pole môže byť užitočné pri písaní metódy, ktorá vypočíta pole, ktoré sa ukáže ako prázdne. Pole nulovej dĺžky je deklarované takto:

nový typ položiek

Všimnite si, že takéto pole nie je ekvivalentom nulového objektu.

Kopírovanie polí

Jedno pole možno skopírovať do druhého, ale obe premenné budú odkazovať na to isté pole.

int luckyNumbers = smailPrimes;
luckyNuimbers = 12; // Prvok smailPrimes je teraz tiež 12.

Výsledok je znázornený na obr. 3.14. Ak potrebujete skopírovať všetky prvky jedného poľa do druhého, použite metódu arraycopy zo System. Jeho volanie vyzerá takto:

System.arraycopy (from, fromlndex, to, tolndex, count);

Pole to musí byť dostatočne veľké, aby obsahovalo všetky skopírované prvky.

Ryža. 3.14. Kopírovanie poľa

Napríklad nižšie uvedené operátory, ktorých výsledky sú znázornené na obr. 3.15, vytvorte dve polia a potom skopírujte posledné štyri prvky prvého poľa do druhého. Kopírovanie začína na druhej pozícii v zdrojovom poli a skopírované položky sa umiestňujú do cieľového poľa počnúc od tretej pozície.

int smailPrimes = (2, 3, 5, 7, 11, 13);
int luckyNumbers = (1001, 1002, 1003, 1004, 1005, 1006, 1007);
System.aggausor (smailPrimes, 2, luckyNumbers, 3, 4);
pre (int i = 0; i< luckyNumbers.length; i++)
System.println (i +. ":" + LuckyNumbersfi]);

Vykonanie týchto príkazov vedie k nasledujúcemu výsledku.

0: 1001
1: 1002
2: 1003
3: 5
4: 7
5: 11
6: 13

Ryža. 3.15. Kopírovanie prvkov poľa

Pole v Jave sa výrazne líši od poľa v C ++. Je to však prakticky to isté ako ukazovateľ na dynamické pole. To znamená, že operátor

int a = nový int; // Java
ekvivalentné operátorovi
i n t * = nové i n t [1 0 0]; // C ++,
ale nie
int a; // C ++

V jazyku Java štandardne príkaz no kontroluje rozsah zmien indexu. Okrem toho jazyk Java nemá aritmetiku ukazovateľa – nemôžete zvýšiť ukazovateľ na prístup k ďalšiemu prvku v poli.