Vícerozměrná pole v java android. Pole v Javě - definice a tvorba, inicializace a plnění
pole (anglické pole) je to objekt, který ukládá pevný počet hodnot stejného typu. Jinými slovy, pole je očíslovaná kolekce proměnných. Zavolá se proměnná v poli prvek pole a jeho pozice v poli je dána vztahem index. Například potřebujeme uložit 50 různých jmen, jak vidíte, je nepohodlné vytvářet pro každé jméno samostatnou proměnnou, takže použijeme pole. Číslování prvků pole začíná od 0 a délka pole je nastavena v době jeho vytvoření a je pevná.
Pro názornost obrázek, ze kterého jsem pořídil Výukový program Java.
Abyste mohli vytvořit pole, musíte jej deklarovat, vyhradit pro něj paměť a inicializovat jej.
Deklarace pole v Javě
Při vytváření pole v Nejprve Java je třeba to oznámit. To lze provést takto:
Int myFirstArray;
Můžete také deklarovat pole takto:
int mySecondArray;
To však není vítáno konvencí kódování Java, protože závorky naznačují, že máme co do činění s polem, a dávají větší smysl, když jsou vedle typového označení.
Na základě tento příklad, deklarovali jsme 2 pole pojmenovaná myFirstArray A mySecondArray. Obě pole budou obsahovat prvky typu int.
Podobně můžete deklarovat pole libovolného typu:
Byte anArrayOfBytes; krátké anArrayOfShorts; long anArrayOfLongs; float anArrayOfloats; double anArrayOfDoubles; boolean anArrayOfBooleans; char anArrayOfChars; String anArrayOfStrings; ...
Typ pole je dán typem, kde typ je datový typ prvků, které obsahuje. Závorky jsou speciální označení, že proměnné jsou obsaženy v poli. Název pole může být jakýkoli, musí se však shodovat s .
Pole lze vytvářet nejen z proměnných základní typy, ale také z libovolných objektů.
Při deklaraci pole v jazyk Java jeho velikost není specifikována a není pro něj vyhrazena žádná paměť. Vytvoří pouze odkaz na pole.
Rezervace paměti pro pole a jeho inicializace.
Int myFirstArray; myFirstArray = new int;
V našem příkladu jsme vytvořili pole 15 prvků typu int a přiřadili ji k dříve deklarované proměnné myFirstArray.
Můžete také deklarovat název pole a vyhradit pro něj paměť na stejném řádku.
int myArray = new int;
Při vytváření pole pomocí klíčové slovo Nový, všechny prvky pole se automaticky inicializují na nulové hodnoty. Aby bylo možné přiřadit prvkům pole jejich počáteční hodnoty, je nutné jej provést inicializace. Inicializaci lze provést prvek po prvku
MyFirstArray = 10; // inicializace prvního prvku myFirstArray = 20; // inicializace druhého prvku myFirstArray = 30; // atd.
a ve smyčce pomocí indexu procházet všechny prvky pole a přiřazovat jim hodnoty.
For(int i = 0; i< 15; i++){ myFirstArray[i] = 10; }
Jak můžete vidět z předchozích příkladů, abyste mohli odkazovat na prvek pole, musíte zadat jeho název a poté v hranatých závorkách index prvku. Prvek pole na určitém indexu se chová stejně jako proměnná.
Zvažte vytvoření a inicializaci pole pomocí následujícího příkladu. V něm vytvoříme pole obsahující čísla 0-9 a vytiskneme hodnoty do konzole.
//vytvoření a inicializace pole int numberArray = new int; for(int i = 0; i< 10; i++){ numberArray[i] = i; } //вывод значений на консоль for(int i = 0; i < 10; i++){ System.out.println((i+1) + "-й элемент массива = " + numberArray[i]); }
Zjednodušený zápis
K vytvoření a inicializaci pole můžete také použít zjednodušený zápis. Neobsahuje slovo Nový a počáteční hodnoty pole jsou uvedeny v závorkách.
int myColor = (255, 255, 0);
Zde je délka pole určena počtem hodnot mezi závorkami oddělenými čárkami. Tento zápis je vhodnější pro vytváření malých polí.
Určení velikosti pole
Velikost pole není vždy zřejmá, takže pro zjištění použijte vlastnost length, která vrací délku pole.
MyColor.length;
Tento kód nám pomůže zjistit, že délka pole myColor je 3.
Příklad: Jsou-li 4 čísla, musíte najít minimum
int čísla = (-9, 6, 0, -59); int min = čísla; for(int i = 0; i< numbers.length; i++){ if(min>čísla[i]) min = čísla[i]; ) System.out.println(min);
Cvičení na jednorozměrných polích v Javě:
- Vytvořte pole obsahující prvních 10 lichých čísel. Vytiskněte prvky pole do konzoly na jednom řádku, oddělené čárkou.
- Vzhledem k poli o rozměru N najděte nejmenší prvek pole a vytiskněte jej do konzoly (pokud existuje několik nejmenších prvků, vytiskněte je všechny).
- V poli z úkolu 2 najděte největší prvek.
- Zaměňte největší a nejmenší prvky pole. Příklad: Je dáno pole (4, -5, 0, 6, 8). Po výměně bude vypadat takto (4, 8, 0, 6, -5).
- Najděte aritmetický průměr všech prvků pole.
Představte si buňky ve skladu. Každý z nich má své vlastní číslo a každý z nich ukládá nějaký předmět „Baggage“. Nebo vinný lístek, ve kterém jsou všechny druhy vín očíslovány a při objednávce stačí uvést číslo nápoje. Nebo seznam studentů ve skupině, ve kterém první buňka bude obsahovat studenta "Andreev" a poslední buňka - "Yakovlev". Nebo seznam cestujících v letadle, z nichž každý má přidělené sedadlo určitý počet. V Javě se pro práci s podobnými strukturami, tedy množstvím homogenních dat, často používají pole.
Co je pole?
Pole je datová struktura, která ukládá prvky stejného typu. Může být reprezentován jako sada očíslovaných buněk, z nichž každá může obsahovat nějaká data (jeden datový prvek na buňku). Přístup k určité buňce se provádí prostřednictvím jejího čísla. Také se nazývá číslo prvku v poli index. V případě pole Java homogenní, to znamená, že všechny jeho buňky budou ukládat prvky stejného typu. Pole celých čísel tedy obsahuje pouze celá čísla (například typu int), pole řetězců obsahuje pouze řetězce, pole prvků třídy Dog, kterou jsme vytvořili, bude obsahovat pouze objekty Dog. To znamená, že v Javě nemůžeme vložit celé číslo do první buňky pole, řetězec do druhé a „pes“ do třetí.Prohlášení pole
Jak deklarovat pole?
Jako každá proměnná musí být pole v Javě deklarováno. Můžete to udělat jedním ze dvou způsobů. Jsou si rovni, ale ten první je více v souladu s Java stylem. Druhým je dědictví jazyka C (mnoho programátorů C přešlo na Javu a pro jejich pohodlí, alternativní způsob). Tabulka ukazuje oba způsoby deklarace pole v Javě: V obou případech je dataType typ proměnných v poli. V příkladech jsme deklarovali dvě pole. Jeden bude ukládat celá čísla typu int , druhý bude ukládat objekty typu Object . Když je tedy pole deklarováno, má název a typ (typ proměnných pole). ArrayName je název pole.Vytvoření pole
Jak vytvořit pole?
Jako každý jiný objekt můžete vytvořit pole Java, to znamená vyhradit pro něj paměťový prostor, pomocí operátoru new. To se provádí takto: new typeOfArray [ length] ; Kde typeOfArray je typ pole a délka je jeho délka (tj. počet buněk) vyjádřená v celých číslech (int). Zde jsme však pouze alokovali paměť pro pole, ale nepřidružili jsme vytvořené pole k žádné dříve deklarované proměnné. Obvykle je pole nejprve deklarováno a poté vytvořeno, například: int myArray; // deklarace pole myArray = new int [ 10 ] ; // vytvoření, tedy alokace paměti pro pole 10 prvků typu int Zde jsme deklarovali pole celých čísel s názvem myArray a pak řekli, že se skládá z 10 buněk (z nichž každá bude obsahovat nějaké celé číslo). Mnohem běžnější je však vytvořit pole hned po jeho deklaraci pomocí této zkrácené syntaxe: int myArray = new int [ 10 ] ; // deklarace a přidělení paměti "v jedné láhvi" Poznámka: Po vytvoření pole s new se jeho buňky uloží s výchozími hodnotami. Pro číselné typy (jako v našem příkladu) to bude 0, pro boolean to bude false , pro referenční typy to bude null . Po operaci tedy int myArray = new int [ 10 ] ; dostaneme pole deseti celých čísel, a dokud se to v průběhu programu nezmění, zapíše se do každé buňky 0.Délka pole v Javě
Jak jsme si řekli výše, délka pole je počet prvků, pro které je pole vypočítáno. Délku pole nelze po jeho vytvoření změnit. Všimněte si, že prvky pole Java jsou číslovány od nuly. To znamená, že pokud máme pole 10 prvků, pak první prvek pole bude mít index 0 a poslední bude mít index 9. K délce pole můžete přistupovat pomocí proměnné length. Příklad: int myArray = new int [ 10 ] ; // vytvořilo pole celých čísel s 10 prvky a pojmenovalo ho myArray Systém. ven. println(myArray.length); // vypíše do konzole délku pole, tedy počet prvků, které můžeme do pole vložit Výstup programu: 10Inicializace pole a přístup k jeho prvkům
Jak vytvořit pole v Javě je již jasné. Po tomto postupu nezískáme prázdné pole, ale pole naplněné výchozími hodnotami. Například v případě int to bude 0 a pokud máme pole s daty referenčního typu, tak se standardně do každé buňky zapíše null. K prvku pole přistupujeme (to znamená, že do něj zapíšeme hodnotu nebo ji zobrazíme na obrazovce nebo s ním provedeme nějakou operaci) podle jeho indexu. Inicializace pole znamená jeho naplnění konkrétními daty (není ve výchozím nastavení). Příklad: vytvoříme pole 4 ročních období a naplníme ho řetězcovými hodnotami - názvy těchto ročních období. String seasons = new String [4]; /* deklaroval a vytvořil pole. Java přidělila paměť pro pole 4 řetězců a nyní je každá buňka null (protože řetězec je referenční typ)*/ roční období[ 0 ] = "zima" ; /* do první buňky, tedy do buňky s nulové číslo jsme napsali řetězec Winter. Zde získáme přístup k nulovému prvku pole a zapíšeme tam konkrétní hodnotu */ roční období[ 1 ] = "Jaro" ; // proveďte stejný postup s buňkou číslo 1 (sekunda) roční období[ 2 ] = "Léto" ; // ...číslo 2 roční období[ 3 ] = "Podzim" ; // a s posledním číslem 3 Nyní všechny čtyři buňky našeho pole obsahují názvy ročních období. Inicializaci lze provést i jinak, v kombinaci s inicializací a deklarací: String seasons = new String ( "Zima" , "Jaro" , "Léto" , "Podzim" ) ; Operátor new lze navíc vynechat: String seasons = ( "Winter" , "Jaro" , "Summer" , "Autumn" ) ;Jak zobrazit pole v Javě?
Prvky pole můžete zobrazit na obrazovce (tedy v konzoli) například pomocí pro smyčku. Jiný, kratší způsob zobrazení pole na obrazovce bude popsán v odstavci “ . Mezitím se podívejme na příklad se smyčkou pole: String seasons = new String ( "Zima" , "Jaro" , "Léto" , "Podzim" ) ; for (int i = 0; i< 4 ; i++ ) { System. out. println (seasons[ i] ) ; } V důsledku toho program zobrazí následující výsledek: Zima jaro léto podzimJednorozměrná a vícerozměrná pole Java
Co když ale nechceme vytvořit pole čísel, pole řetězců nebo pole nějakých objektů, ale pole polí? Java vám to umožňuje. Již známé pole int myArray = new int je tzv. jednorozměrné pole. A pole polí se nazývá dvourozměrné. Je to jako tabulka, která má číslo řádku a číslo sloupce. Nebo kdyby vás učili na začátku lineární algebra, - do matrice. K čemu jsou tato pole? Zejména pro programování stejných matic a tabulek, stejně jako objektů, které se jim podobají ve struktuře. Například hrací pole pro šachy může být specifikováno polem 8x8. Vícerozměrné pole je deklarováno a vytvořeno následovně: Int myTwoDimentionalArray = new int [ 8 ] [ 8 ] ; Toto pole má přesně 64 prvků: myTwoDimentionalArray , myTwoDimentionalArray , myTwoDimentionalArray , myTwoDimentionalArray a tak dále až po myTwoDimentionalArray . Pokud ji tedy použijeme k reprezentaci šachovnice, buňka A1 bude reprezentovat myTwoDimentionalArray a E2 bude reprezentovat mojeTwoDimentionalArray . Kde jsou dva, tam jsou tři. V Javě můžete definovat pole polí... pole polí polí a tak dále. Pravda, trojrozměrná a více polí se používají velmi zřídka. Pomocí trojrozměrného pole však můžete naprogramovat například Rubikovu kostku.Užitečné metody pro práci s poli
Pro práci s poli v Javě existuje třída java.util.Arrays (pole v angličtině a znamená „pole“). Obecně se s poli nejčastěji provádějí následující operace: plnění prvky (inicializace), extrahování prvku (podle čísla), řazení a vyhledávání. Hledání a řazení polí je samostatné téma. Na jedné straně je velmi užitečné procvičit a napsat několik vyhledávacích a třídicích algoritmů sami. Na druhou stranu všechno lepší způsoby již napsaný a zahrnutý v knihovnách Java a lze jej legálně používat.Články k vyhledávání a třídění: Řazení a vyhledávání v kurzu CS50: |
Pole řazení
Metoda void sort(int myArray, int fromIndex, int toIndex) seřadí pole celých čísel nebo jeho podpole ve vzestupném pořadí.Vyhledejte v poli požadovaný prvek
int binarySearch(int myArray, int fromIndex, int toIndex, int key) . Tato metoda hledá klíčový prvek v již seřazené pole myArray nebo subarray from fromIndex toIndex . Pokud prvek není nalezen, vrátí číslo prvku nebo fromIndex-1 .Převod pole na řetězec
Metoda String toString(int myArray) převede pole na řetězec. Jde o to, že v Javě pole nepřepisují toString() . To znamená, že pokud se pokusíte vytisknout celé pole (spíše než prvek po prvku jako v „ “) přímo na obrazovku (System.out.println(myArray)), získáte název třídy a hexadecimální hash kód pole (ten je definován pomocí Object.toString()). Pokud jste začátečník, možná nerozumíte vysvětlení metody toString. V první fázi to není nutné, ale použitím této metody je výstup pole zjednodušen. Java usnadňuje tisk pole na obrazovku bez použití smyčky. Více o tom v příkladu níže.Příklad na sort, binarySearch a toString
Vytvořme pole celých čísel, zobrazme ho na obrazovce pomocí toString , seřaďme ho metodou sort a najdeme v něm nějaké číslo. class Main ( public static void main (String args) ( int pole = ( 1 , 5 , 4 , 3 , 7 ) ; //deklarování a inicializace pole Systém. ven. println(pole); //pokus o zobrazení našeho pole na obrazovce bez metody toString - dostaneme hexadecimální číslo//vytiskne pole "správně" Pole. řazení (pole, 0 , 4 ) ; // seřadí celé pole od nuly po čtvrtý člen Systém. ven. println(Arrays.toString(array) ) ; //vytiskne setříděné pole na obrazovku klíč int = pole. binarySearch (pole, 5 ) ; // hledá klíč - číslo 5 v seřazeném poli. //binarySearch metoda vrátí index prvku seřazeného pole, ve kterém je "skryto" požadované číslo Systém. ven. println(klíč); //vytiskne index požadovaného čísla Systém. ven. println (Pole. binarySearch (pole, 0) ); //a teď zkusme najít číslo, které není v poli, // a okamžitě zobrazí výsledek na obrazovce } } Výstup programu: 3 -1 První řádek je pokus o zobrazení pole bez toString , druhý řádek je výstup pole pomocí toString , třetí řádek je seřazené pole, čtvrtý řádek je index požadovaného čísla 5 v seřazeném poli (nezapomeňte, že počítáme od nuly, takže čtvrtý prvek pole má index 3). V pátém řádku vidíme -1. V poli žádný takový index neexistuje. Výstup signalizuje, že požadovaný prvek (in tento případ, 0) není v poli.To hlavní o polích
Hlavní charakteristiky pole jsou typ dat v něm umístěných, název a délka.
O tom druhém se rozhoduje během inicializace (alokace paměti pro pole), první dva parametry jsou určeny při deklaraci pole.
Velikost pole (počet buněk) musí být definována v int
Po vytvoření pole nelze změnit jeho délku.
K prvku pole lze přistupovat pomocí jeho indexu.
V polích, stejně jako jinde v Javě, jsou prvky číslovány od nuly.
Po proceduře vytvoření pole se pole vyplní výchozími hodnotami.
Pole v Javě je velmi odlišné od pole v C++. Je to však prakticky stejné jako ukazatel na dynamické pole.
Užitečné materiály o polích
Chcete se dozvědět více o polích? Podívejte se na články níže. Na toto téma je spousta zajímavých a užitečných informací.Něco o polích - pěkný podrobný článek o polích
Třída Arrays a její použití - článek popisuje některé metody třídy Array
Pole je první lekcí JavaRush o polích.
Vraťte pole nulové délky, nikoli null – autor efektivního programování Joshua Bloch hovoří o nejlepším způsobu, jak vrátit prázdná pole
Poslední aktualizace: 09.11.2018
Pole představuje sadu hodnot stejného typu. Deklarace pole je jako deklarace běžné proměnné, která ukládá jednu hodnotu, a existují dva způsoby, jak deklarovat pole:
datový_typ název_pole; // nebo datový_typ název_pole;
Definujme například pole čísel:
int nums; int nums2;
Po deklaraci pole jej můžeme inicializovat:
int nums; nums = new int; // pole 4 čísel
Pole je vytvořeno pomocí následující konstrukce: new data_type[number_of_elements] , kde new je klíčové slovo, které alokuje paměť pro počet prvků zadaný v závorkách. Například nums = new int; - tento výraz vytvoří pole čtyř prvků int a každý prvek bude mít výchozí hodnotu - číslo 0.
Pole můžete také okamžitě inicializovat, když jej deklarujete:
int nums = nový int; // pole 4 čísel int nums2 = new int; // pole 5 čísel
S touto inicializací mají všechny prvky pole výchozí hodnotu. Pro číselné typy(včetně pro typu char) je číslo 0, pro boolean je nepravda a pro ostatní objekty je null . Například pro typ int je výchozí hodnotou číslo 0, takže pole nums definované výše se bude skládat ze čtyř nul.
Je však také možné nastavit konkrétní hodnoty pro prvky pole, když je vytvořeno:
// tyto dva způsoby jsou ekvivalentní int nums = new int ( 1, 2, 3, 5 ); int nums2 = (1, 2, 3, 5);
Stojí za zmínku, že v tomto případě není velikost pole uvedena v hranatých závorkách, protože se počítá podle počtu prvků ve složených závorkách.
Po vytvoření pole můžeme odkazovat na kterýkoli z jeho prvků indexem, který je předán v hranatých závorkách za názvem proměnné pole:
int nums = nový int; // nastavení hodnot prvků pole nums = 1; nums = 2; nums = 4; čísla = 100; // získání hodnoty třetího prvku pole System.out.println(nums); // 4
Indexování prvků pole začíná na 0, takže v tomto případě, abychom odkazovali na čtvrtý prvek v poli, musíme použít výraz nums.
A protože je naše pole definováno pouze pro 4 prvky, nemůžeme odkazovat například na šestý prvek: nums = 5; . Pokud se o to pokusíme, dostaneme chybu.
Délka pole
Nejdůležitější vlastností, kterou pole mají, je vlastnost length, která vrací délku pole, tedy počet jeho prvků:
int nums = (1, 2, 3, 4, 5); int délka = nums délka; // 5
Není neobvyklé, že poslední index je neznámý a pro získání posledního prvku pole můžeme použít tuto vlastnost:
int last = nums;
Vícerozměrná pole
Dříve jsme zvažovali jednorozměrná pole, která mohou být reprezentována jako řetězec nebo řetězec hodnot stejného typu. Ale kromě jednorozměrných polí existují i vícerozměrná. Nejznámější vícerozměrné pole je tabulka, která představuje dvourozměrné pole:
int nums1 = new int ( 0, 1, 2, 3, 4, 5); int nums2 = (( 0, 1, 2), ( 3, 4, 5));
Vizuálně lze obě pole reprezentovat následovně:
Jednorozměrné pole nums1
Dvourozměrné pole nums2
Protože pole nums2 je dvourozměrné, ano jednoduchý stůl. Dalo by se také vytvořit takto: int nums2 = new int; . Množství hranaté závorky označuje velikost pole. A čísla v závorkách - počet řádků a sloupců. A také pomocí indexů můžeme v programu použít prvky pole:
// nastavíme prvek prvního sloupce druhého řádku nums2=44; System.out.println(čísla2);
Deklarace trojrozměrného pole může vypadat takto:
int nums3 = new int;
zubaté pole
Vícerozměrná pole mohou být také reprezentována jako "zubatá pole". Ve výše uvedeném příkladu mělo 2D pole 3 řádky a 3 sloupce, takže jsme skončili s plochou tabulkou. Ale můžeme každému prvku ve dvourozměrném poli přiřadit samostatné pole jiná částka Prvky:
int nums = nový int; nums = new int; nums = new int; nums = new int;
pro každého
Speciální verze cyklu for je navržena pro iteraci prvků v sadách prvků, jako jsou pole a kolekce. Je podobná smyčce foreach v jiných programovacích jazycích. Formální oznámení:
For (datatype variable_name: container)( // actions )
Například:
pole int = new int ( 1, 2, 3, 4, 5 ); for (int i: pole)( System.out.println(i); )
Kontejner je v tomto případě pole dat typu int . Poté je proměnná deklarována s typem int
Totéž by se dalo udělat s běžná verze pro:
pole int = new int ( 1, 2, 3, 4, 5 ); for (int i = 0; i< array.length; i++){ System.out.println(array[i]); }
Zároveň je tato verze cyklu for flexibilnější než for (int i: array) . Zejména v této verzi můžeme měnit prvky:
pole int = new int ( 1, 2, 3, 4, 5 ); for (int i=0; i Nejprve se vytvoří smyčka pro iteraci řádků a poté se uvnitř první smyčky vytvoří vnitřní smyčka pro iteraci přes sloupce konkrétního řádku. Podobně můžete iterovat přes trojrozměrná pole a sady s velkým počtem dimenzí. pole je datová struktura, která je navržena pro ukládání dat stejného typu. Pole v Javě fungují jinak než v C/C++. Zvláštnosti: Jednorozměrná pole: Obecný formulář prohlášení Zadejte var-name; nebo zadejte var-name; Deklarace má dvě složky: typ a název. type deklaruje typ prvku pole. Typ prvku určuje datový typ každého prvku. Kromě typu int můžeme vytvořit i pole dalších datových typů, jako je char, float, double nebo uživatelsky definovaný datový typ (objekty třídy) Typ prvku tedy určuje, jaký typ dat bude v poli uložen. Například: // obě jsou platné deklarace int intArray; nebo pole int; byte byteArray; shortsArray; boolean booleanArray; dlouhé dlouhé pole; float floatArray; double doubleArray; char charArray; // pole odkazů na objekty // třídy MyClass (třída vytvořená // uživatelem) MyClass myClassArray; Object ao, // pole Object Collection ca; // pole kolekce // neznámého typu Ačkoli první deklarace výše uvádí skutečnost, že intArray je proměnná pole, pole ve skutečnosti neexistuje. Jednoduše řekne kompilátoru, že tato proměnná je typu integer. Chcete-li přiřadit pole int ke skutečnému fyzickému poli celých čísel, musíte jej označit new a přiřadit jej k int. Když je pole deklarováno, vytvoří se pouze odkaz na pole. Chcete-li skutečně vytvořit nebo alokovat úložiště k poli, vytvořili byste takové pole: obecná forma nového při použití na jednorozměrné pole je následující: Zde type určuje datový typ, velikost určuje počet prvků v poli a var-name je název proměnné pole. pole int; //deklarace intArray = new int; // alokace paměti int intArray = nový int; // Svaz Je důležité vědět, že prvky pole alokované pomocí new jsou automaticky inicializovány na nulu (pro číselné typy), false (pro booleovské typy) nebo nulu (pro referenční typy). V situaci, kdy velikost pole a proměnné jsou již známé, lze použít literály. int intArray = new int( 1,2,3,4,5,6,7,8,9,10); // Deklarace literálu pole Ke každému prvku pole se přistupuje prostřednictvím jeho indexu. Index začíná na 0 a končí na (celková velikost)-1. Všechny prvky jsou přístupné pomocí smyčky for. Pro (int i = 0; i< arr.length; i++)
System.out.println("Element at index " + i +
" : "+ arr[i]);
// Příklad pro ilustraci vytvoření pole třída GFG // alokace paměti pro 5 celých čísel. //již brzy... // přístup k prvkům zadaného pole Prvek na indexu 0: 10 Prvek na indexu 1: 20 Prvek na indexu 2: 30 Prvek na indexu 3: 40 Prvek na indexu 4: 50 Pole objektů se vytvoří stejným způsobem jako datové prvky, a to následovně: Student arr = nový student; StudentArray obsahuje sedm úložných prvků každý ze studentské třídy, do kterých lze uložit adresy sedmi objektů Student. Objekty studentů musí být vytvořeny pomocí konstruktoru třídy student a jejich odkazy musí být přiřazeny k prvkům pole takto: Student arr = nový student; // Java program pro ilustraci vytváření pole třídní žák // Prvky pole jsou objekty třídy Student. // alokace paměti pro 5 objektů typu Student. // inicializuje první prvky pole // inicializuje druhé prvky pole // již brzy... // přístup k prvkům zadaného pole Dostaneme: Element v 0:1 aman Element v 1:2 vaibhav Element v 2:3 shikar Element v 3:4 dharmesh Element v 4:5 mohit Co se stane, když se pokusíme získat přístup k prvku mimo pole? Vícerozměrná pole jsou pole polí, kde každý prvek obsahuje odkaz na jiné pole. Vytvořeno přidáním jedné sady hranatých závorek () pro každý rozměr. Zvažte příklad: int intArray = nový int; //2D pole nebo matice int intArray = new int; // 3D pole Třída vícerozměrná // tisk 2D pole System.out.println(); Výstup: 2 7 9 3 6 1 7 4 2 Stejně jako proměnné můžeme předávat pole metodám. // Java program pro demonstraci // předání pole třídě metody Test ( // metoda ovladače public static void main(String args) ( int arr = (3, 1, 2, 5, 4); // předání pole metodě m1 sum(arr); ) public static void sum(int arr) ( // získání součtu hodnot pole pro (int sumint i = 0;< arr.length; i++)
sum+=arr[i];
System.out.println("sum of array values: " + sum);
}
}
Na výstupu dostaneme: součet hodnot pole: 15 Jako obvykle může metoda také vrátit pole. Například níže uvedený program vrátí pole z m1. // Java program pro demonstraci // návrat pole z metody třídy Test ( // metoda ovladače public static void main(String args) ( int arr = m1(); for (int i = 0; i< arr.length; i++)
System.out.print(arr[i]+" ");
}
public static int m1()
{
// returning array
return new int{1,2,3};
}
}
Každé pole má přidružený objekt třídy sdílený se všemi ostatními poli se stejným typem komponenty. // Program Java k demonstraci // Objekty třídy pro pole třída Test ( public static void main(String args) ( int intArray = nový int; byte byteArray = nový byte; short shortsArray = nový krátký; // pole řetězců String strArray = nový řetězec; System.out.println(intArray.getuClassprint(Array).ray.getuClass. )); System.out.println(byteArray.getClass ()); System.out.println(shortsArray.getClass()); System.out.println(strArray.getClass()); ) ) třída+""); ))) Klon vícerozměrného pole (jako Object ) je kopie, což znamená, že vytvoří pouze jedno nové pole s každým prvkem a odkazem na původní pole prvků, ale vnořená pole jsou běžná. // Java program pro demonstraci // klonování vícerozměrných polí třída Test ( public static void main(String args) ( int intArray = ((1,2,3),(4,5)); int cloneArray = intArray.clone(); // vytiskne false System.out.println(intArray == klonopole.e. kopíruje se true. System. // bude vytvořena kopie systému jako-out. i. println(intArray == cloneArray); System.out. println(intArray == cloneArray); ) ) Nepravdivé
je uspořádaná kolekce nebo číslovaný seznam hodnot odkaz
který se provádí pod běžným názvem. Mohou to být primitivní hodnoty, objekty nebo dokonce jiná pole, ale všechny hodnoty pole musí být stejného typu. Typ pole je identický s typem hodnot, které obsahuje. Pole jsou referenční datové typy, vlastně jako všechny ostatní typy, kromě primitivních. Ještě jednou připomenu, že v Javě je vše objekt, jedinou výjimkou jsou primitivní typy. Pole mohou být jednorozměrná nebo vícerozměrná. Proces vytváření pole lze rozdělit do tří kroků: Prohlášení pole
Pouze v této fázi typ proměnné odkaz (odkaz) na pole
A obsahující typ pole. K tomu se zapíše název typu prvků pole, hranaté závorky to naznačují je deklarován odkaz na pole
, není jednoduchá proměnná, a názvy proměnných typu odkazu jsou uvedeny, například: V podstatě je deklarace polí úplně stejná operace jako deklarace jakýchkoli jiných datových typů, i když má trochu jinou syntaxi, protože se jedná o stejná pole. Java podporuje další syntaxi pro deklarování proměnných pole, což zajišťuje kompatibilitu s C a C++. Podle této syntaxe následuje jeden nebo více párů hranatých závorek za názvem proměnné, nikoli za názvem typu: Tato syntaxe je však často matoucí a je třeba se jí vyhnout. V následujícím příkladu je snadné zaměnit, co je myšleno: Tato syntaxe se nedoporučuje, protože již bylo řečeno, že je matoucí, navíc v konvencích pro návrh kódu Java se doporučuje syntaxe, která byla uvedena jako první, tedy hranaté závorky bezprostředně následují za typem deklarovaného pole. V tomto případě je deklarováno pole plovoucích hodnot s názvem rate a proměnná typu float maxRate. To znamená, že pokud jsou hranaté závorky hned za typem deklarovaného pole, pak všechny proměnné, které jsou deklarovány v tomto řádku, jsou odkazy na pole deklarovaného typu, a pokud jsou hranaté závorky napravo od proměnné, pak se jedná pouze o odkaz na pole deklarovaného typu. Tomu je třeba rozumět tato operace deklarace pole ještě nevytváří pole, ale pouze deklaruje proměnnou, která je na něj odkazem, který nelze v programu použít bez inicializace, protože kompilátor zobrazí chybu, že proměnná pole není inicializována. Dokud není deklarovaná proměnná pole definována, může obsahovat (pokud přiřadíte) hodnotu nula. A teprve po definici bude obsahovat odkaz na konkrétní objekt. Při deklaraci proměnné pole není možné určit délku pole, protože velikost je striktně funkcí objektu pole, nikoli odkazem na něj.. Instantování pole
V této fázi je indikován počet prvků pole, nazývaný jeho velikost, pro pole je přiděleno místo v paměti RAM, referenční proměnná je přiřazena operátorem =
adresa pole. Všechny tyto úkony provádí operátor Nový následován typ prvky pole. Například: Ještě jednou je ale vhodné poznamenat, že předtím musí být proměnná písmen deklarována jako pole. Aby to bylo jasnější, může být reprezentován takto: Při vytváření pole s touto syntaxí se všechny prvky pole automaticky inicializují s výchozími hodnotami. Je nepravda pro booleovské hodnoty, "\u0000" pro hodnoty znaků, 0 pro celočíselné hodnoty, 0,0 pro hodnoty s plovoucí desetinnou čárkou a null pro objekty nebo pole. V Javě je velikost pole pevná. Vytvořené pole nelze zvětšit ani zmenšit. Požadovaná velikost vytvořeného pole je dána nezáporným celým číslem. Ale kdykoli lze proměnné typu pole přiřadit nové pole jiné velikosti. To znamená, že lze přiřadit odkaz na jiné pole stejného typu jako deklarovaná proměnná. Indexy polí vždy začínají na 0. První dvě operace: deklarace a vytvoření pole lze spojit do jednoho příkazu. Například: Tento operátor je ekvivalentní dvěma výše uvedeným. Po této operaci bude proměnná písmen již obsahovat odkaz na pole a pokud se pokusíme zobrazit jeho hodnotu, dostaneme hodnotu, něco jako
; Je ale třeba mít na paměti, že proměnné A A b ukažte na stejné pole. Zpočátku to může být matoucí, ale pokud si pamatujete, že máme co do činění s referenčními datovými typy, pak vše zapadne na své místo. Pokud tento bod není jasný, o něco později to vše analyzujeme na příkladech. Poté se pole, na které odkazuje tento odkaz, ztratí, pokud na něj nebyly žádné jiné odkazy.. Velikost nebo délku pole lze získat pomocí konstanty délka
, který je definován pro každé pole a vrací jeho délku. Už jsme to nejednou použili v příkladech, kdy jsme pracovali s argumenty předávanými na příkazovém řádku. Můžete vytvářet a používat pole nulové délky (prázdné pole). Například: Takové pole není možné inicializovat, protože jednoduše nemá prvky, které lze inicializovat. Okamžitě vyvstává otázka, proč sakra potom potřebují tato prázdná pole? Ale jsou nezbytné a dokonce velmi užitečné! Prázdné pole se obvykle používá na těch místech v programu, kde není předem známo, zda tam budou prvky nebo ne. Jsou-li prvky, je vráceno neprázdné pole, pokud nejsou žádné prvky, je vráceno prázdné pole. Příkladem je pole řetězců, které je předáno metodě main() a obsahuje argumenty příkazového řádku, a pokud žádné nejsou, vrátí se prázdné pole. Prázdné pole je lepší než nula, protože nevyžaduje samostatné if "a pro zpracování. Totéž platí pro seznamy a další kolekce. Proto existují metody Collections.emptyList, emptySet, emptyMap. Inicializace pole
V této fázi získávají prvky pole počáteční hodnoty. Existuje několik způsobů, jak inicializovat prvky pole s hodnotami: Odkazuje na konkrétní prvek pole podle jeho indexu, která začíná od nuly, jak již bylo zmíněno. Indexy lze zadat libovolnými celočíselnými výrazy kromě typu dlouho
, například a , a , a[++i] . Runtime systém Java zajišťuje, že hodnoty těchto výrazů nepřekročí délku pole. Pokud k ukončení stále dojde, překladač Java poté zastaví provádění programu a zobrazí na konzole zprávu o tom, že index pole překračuje hranice své definice ( Výjimka ArrayIndexOutOfBounds). Zvažte příklad prvního způsobu inicializace: Druhý způsob inicializace lze implementovat různými způsoby. Inicializaci pole lze kombinovat s krokem vytvoření, ale před touto operací musí být pole již deklarováno. Například: Před vytvořením a inicializací pole ar už to bylo oznámeno. Pole můžete také inicializovat ve fázi jeho deklarace s následující syntaxí: Pozornost! Tato syntaxe inicializace pole funguje pouze v případě, že je pole deklarováno a kombinuje všechny tři operace najednou: deklaraci, vytvoření a inicializaci. Pokud je pole již deklarováno, nelze tuto syntaxi použít. Kompilátor vyvolá chybu. to je: int ar
;
// deklarace pole Taková akce nebude fungovat. Můžete také inicializovat ve fázi deklarace a trochu jinak: I když tato syntaxe je delší. Pokud si všimnete, pak tato syntaxe je také kombinací všech tří operací: deklarace, vytvoření a inicializace. Java poskytuje syntaxi, která podporuje anonymní pole (nejsou přiřazena k proměnným, a proto nemají jména). Někdy pole stačí použít pouze jednou (například předat metodě), takže nechcete ztrácet čas jeho přiřazením k proměnné, takže můžete výsledek příkazu použít hned. Nový. Například: Syntaxe pro inicializaci polí se složenými závorkami se nazývá literál, protože k inicializaci se používá pole literál. Je důležité pochopit, že doslovná pole se vytvářejí a inicializují za běhu, nikoli v době kompilace.. Zvažte následující literál pole: Zkompiluje se do tohoto bytekódu Java: Pokud tedy potřebujete do programu Java vložit velké množství dat, je nejlepší je nezahrnout přímo do pole, protože kompilátor Java bude muset vytvořit mnoho inicializačního bajtkódu pole a interpret jazyka Java pak bude muset celý tento kód pracně spustit. V takových případech je lepší uložit data do externího souboru a načíst je do programu za běhu. Nicméně skutečnost, že Java inicializuje pole za běhu, má důležité důsledky. To znamená, že prvky doslovného pole jsou libovolné výrazy vyhodnocené za běhu, nikoli konstantní výrazy vyhodnocené kompilátorem.. Například: Teď si trochu zacvičíme. Známá metoda main() využívá schopnost vrátit pole nulové délky, pokud na příkazovém řádku nejsou žádné argumenty, což vám umožňuje vyhnout se použití příkazu if ke kontrole null, abyste se vyhnuli chybě během provádění programu. To znamená, že můžeme pole okamžitě použít ve smyčce, i když dodržujeme pravidla, abychom nepřekročili maximální index. Na začátku programu vytiskneme hodnotu délky pole a poté v první smyčce postupně vytiskneme všechny hodnoty prvků pole. Druhá smyčka dělá totéž, ale zvráceným způsobem. Druhý příklad je ahoj, abyste potěšili svůj mozek, abyste rozšířili své vědomí, nenudilo vás vědět, jak to udělat, ale jak to nedělat, no, čistě pro vzdělávací a vzdělávací účely. Možná ve volném čase přijdete na to, jak funguje druhý cyklus. Tento program generuje následující výstup: V prvním případě jsme nezadali žádné argumenty, takže jsme dostali pole nulové délky, které nebylo v cyklech zpracováno, protože nesplňuje podmínky cyklů. Ve druhém případě jsme předali argumenty na příkazovém řádku a následně bylo pole zpracováno v cyklech.Iterace přes vícerozměrná pole ve smyčce
int nums = new int ( (1, 2, 3), (4, 5, 6), (7, 8, 9)); for (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();
}
Inicializace a přístup k poli
Jak vytvořit pole v Javě
var-name = novy typ ;
Získání pole je dvoufázový proces. Nejprve musíte deklarovat proměnnou požadovaného typu. Za druhé, musíte alokovat paměť, která bude obsahovat pole pomocí new a přiřadit ji k proměnné. V Javě jsou tedy všechna pole dynamicky alokována.Array literály
Přístup k prvkům Java Array pomocí smyčky for
// celá čísla, vloží některé hodnoty do pole,
// a vypíše každou hodnotu.
{
{
int arr;
arr = nový int;
arr = 10;
arr = 20;
arr = 30;
arr = 40;
arr=50;
for (int i = 0; i< arr.length; i++)
System.out.println("Prvek na indexu " + i +
" : "+ arr[i]);
}
}
V důsledku toho získáme:Pole objektů
// objekty
{
public int roll_no;
public Stringname;
Student(int roll_no, název řetězce)
{
this.roll_no = roll_no;
this.name = jméno;
}
}
veřejná třída GFG
{
public static void main (string args)
{
// deklaruje pole celých čísel.
student arr;
arr = nový student;
arr = new Student(1,"aman");
arr = nový student(2,"vaibhav");
arr = nový student(3,"shikar");
arr = nový student(4,"dharmesh");
arr = new Student(5,"mohit");
for (int i = 0; i< arr.length; i++)
System.out.println("Prvek na " + i + " : " +
arr[i].roll_no +" "+ arr[i].name);
}
}
Kompilátor vyvolá výjimku ArrayIndexOutOfBoundsException, která označuje, že k poli bylo přistupováno s neplatným indexem. Index je buď záporný, nebo větší nebo roven velikosti pole. Multidimenzionální
{
public static void main (Stringargs)
{
// deklarace a inicializace 2D pole
int arr = ((2,7,9),(3,6,1),(7,4,2));
for (int i=0; i< 3 ; i++)
{
pro (int j=0; j< 3 ; j++)
System.out.print(arr[i][j] + " ");
}
}
} Předávání polí metodě
Vrácení polí z metod
objekty třídy
skutečný
skutečný
Tětiva
str
;
// str je odkaz na pole řetězců
byte
dva bajty
;
// twoBytes odkaz na dvourozměrné pole bajtů
char
písmena
,
číslic
;
//písmena a číslice jsou odkazy na pole znaků
byte
arrayOfArrayOfBytes
;
// Stejné jako byte arrayOfArrayOfBytes
byte
arrayOfArrayOfBytes
;
// Stejné jako byte arrayOfArrayOfBytes
písmena =
Nový
char
[
10
]
;
// vytvořilo pole znaků o velikosti 10 prvků
int
b
=
A;
ar[
0
]
=
1
;
ar[
1
]
=
2
;
ar =
Nový
int
{
1
,
2
}
;
// vytvoření a inicializace
ar =
{
1
,
2
}
;
// CHYBA!!! vytváření a inicializace pole
PerfectNumbers[
0
]
=
6
;
PerfectNumbers[
1
]
=
28
;