Korisni savjeti

Ispis elemenata niza

Pin
Send
Share
Send
Send


U Javi nizovi ne nadjačavaju toString (), tako da ako pokušate izravno prhashCode, dobit ćete className + @ + hex hashCode niza kako je definirano int intArray = new int <1, 2, 3, 4, 5>, System.out. println (intArray), // ispisuje nešto poput "I @ 3343c8b3":

Ali obično bismo željeli nešto više // niz primitiva: int intArray = new int <1, 2, 3, 4, 5>, // izlaz: 1, 2, 3, 4, 5 // niz od reference objekta: String strArray = new String <"John", "Mary", "Bob">, // izlaz: John, Mary, Bob. Koji je najlakši način za to? Evo nekoliko primjera ulaza i izlaza:

Reflection API

09. svibnja 2010. 00:39
10. svibnja 2010. 10:01

Dovoljno je proslijediti niz u parametru metode, ovako:

Već ovisno o vrsti elemenata u nizu, sadržaj petlje se može promijeniti.

10. svibnja 2010. 10:34
10. svibnja 2010. 11:36

Žao mi je, toliko sam novak tolikim da ne znam što je što. Obećavam da ću to popraviti.

10. svibnja 2010. 11:49

Dovoljno je proslijediti niz u parametru metode, ovako:

Već ovisno o vrsti elemenata u nizu, sadržaj petlje se može promijeniti.

Tako mogu. Ali moram nazvati metodu druge klase, a ne statičnu Maineovu.
Odnosno, pitanje je točno kako pravilno pozvati s obzirom na niz?
Integer.printArray ()?
printArray (intArray)?
intArray.printArray ()?
Sobsno ne radi nijednu opciju (

10. svibnja 2010. 14:55.

Prva i posljednja opcija se ne smiju raditi :) A zašto druga ne ide tako, trebate vidjeti kôd ..

ps. administraciji: tema bi trebala biti premještena: roll:

10. svibnja 2010. 15:27

Prva i posljednja opcija se ne smiju raditi :) A zašto druga ne ide tako, trebate vidjeti kôd ..

ps. administraciji: tema bi trebala biti premještena: roll:

suvišni konstruktori uklonjeni da smanje tekst

Deklaracija niza i inicijalizacija

Izjava o deklaraciji polja u Javi je kao i svaka druga varijabla. Sadrži vrstu podataka nakon koje slijedi ime polja. Jedina razlika je upotreba uglatih zagrada uz vrstu podataka:

Gornji operateri deklaracije kažu prevoditelju da je intArrayvariable niz cijelih brojeva, floatArrayis je niz brojeva s pomičnim zarezom, a charArrayis je niz znakova.

Kao i druge varijable, one se ne mogu koristiti sve dok se vrijednost ne inicijalizira i ne postavi. U slučaju niza, ukazivanje na vrijednost treba odrediti veličinu matrice:

Broj unutar zagrada ukazuje koliko je elemenata u nizu. Gornji kôd stvara niz cijelih brojeva koji se sastoji od 10 elemenata.

Izjašnjavanje i postavljanje veličine niza može se izvršiti u jednom izrazu:

Nizovi nisu ograničeni na primitivne vrste podataka. Možete stvoriti i niz nizova ili objekata Java:

Korištenje nizova

Nakon što se niz inicijalizira, možete postaviti vrijednosti elemenata pomoću indeksa. Određuje položaj svakog elementa u nizu. Prvi element je na položaju 0, drugi na položaju 1, i tako dalje.

Važno je napomenuti da je indeks prvog elementa 0. Obično dolazi do zbrke kada počnete razmišljati da, budući da u nizu postoji 10 elemenata, njihovi indeksi će biti navedeni od 1 do 10. Ali u stvari, rezultat ide od 0 do 9. Na primjer, vraćajući se primjeru s lutrijama, možete stvoriti niz od 6 elemenata i dodijeliti im brojeve iz lutrije:

Skraćeni način za popunjavanje niza:

Vrijednosti svakog elementa navedene su unutar kovrčavih zagrada. Redoslijed vrijednosti određuje koju će vrijednost imati svaka stavka, počevši od nule.

Da bi se dobila vrijednost elementa, koristi se njegov indeks:

Da biste saznali duljinu polja u Javi, upotrijebite polje dužine:

Napomena: Uobičajena je pogreška kada se koristi metoda duljine kada se vrijednost duljine koristi kao pozicija indeksa. To će uvijek dovesti do pogreške, jer su položaji indeksa niza 0, dok je položaj duljine 1.

Višedimenzionalni nizovi

Do sada smo razgovarali samo o jednodimenzionalnim nizovima. Ali nizovi mogu imati više dimenzija. Višedimenzionalni nizovi su spremnici koji sadrže nekoliko matrica istovremeno:

Indeks višedimenzionalnih nizova sadrži dva broja:

Istovremeno, duljina polja unutar višedimenzionalnog Java polja ne smije biti šarmantno ista:

Kopirajte niz

Za kopiranje matrice najjednostavniji je način upotrebe arraycopymethod iz klase System. Metoda uzima pet parametara: izvorni niz, položaj u indeksu (iz kojeg želite započeti kopiranje elemenata), novi niz, položaj u indeksu za početak lijepljenja i broj elemenata koji se kopiraju:

U primjeru stvaramo novi niz koji sadrži posljednja četiri elementa iz int polja:

Budući da nizovi imaju fiksnu duljinu, arraycopymethod vam omogućava da povoljno promijenite duljinu polja.

Za bolje razumijevanje nizova, možete pročitati o tome kako upravljati nizovima pomoću klase Arrays. A također i o stvaranju dinamičkih nizova u Javi (to jest, nizovima s neograničenim brojem elemenata) pomoću klase ArrayList.

Ova je publikacija prijevod članka „Rad s nizovima na Javi“ koji je pripremio prijateljski tim projekta Internet tehnologija.

Odgovori: 30

Počevši s Java 5, možete koristiti Arrays.deepToString (arr) ili Object za polja unutar polja. Imajte na umu da inačica .toString () zove String array = new String <"John", "Mary", "Bob">, System.out.println (Arrays.toString (array)), svaki objekt u nizu. Zaključak je čak uokviren točno onako kako vi tražite.

Int niz:

Uvijek provjerite standardne knjižnice. pokušajte:

ili ako vaš niz sadrži druge nizove kao elemente:

Međutim, lijepo je znati da za „uvijek prvo provjeri standardne knjižnice“ nikada ne bih naišao na trik Arrays.toString (myarray)

- Zato što sam se koncentrirao na tip mijarve da vidim kako to učiniti. Nisam htio da ovo ponovim: treba mi jednostavan poziv tako da izgleda isto kao u programu za uklanjanje pogrešaka Eclipse, a myarray.toString () jednostavno nije.

U JDK1.8 možete koristiti agregirane operacije i lambda izraz:

Dvostruki niz:

Uvijek prvo provjerite standardne biblioteke. pokušajte:

ili ako vaš niz sadrži druge nizove kao elemente:

Lijepo je znati, međutim, da "uvijek provjerite standardne biblioteke", nikad ne bih naišao na trik Arrays.toString (myarray)

- budući da sam se usredotočio na tip myarray-a da vidim kako to učiniti. Nisam htio ponavljati ovo: želio sam jednostavan poziv kako bi izgledao kao što vidim u programu za ispravljanje pogrešaka Eclipse, a myarray.toString () to jednostavno nije učinio.

U JDK1.8 možete koristiti agregirane operacije i lambda izraz:

Ako koristite Java 1.4, to možete učiniti umjesto toga:

(Ovo radi u 1.5+, naravno.)

Počevši s Java 8, također možete koristiti metodu pridruživanja () koju pruža klasa String da biste ispisali elemente matrice bez zagrade koji su odvojeni odabranim separatorom (što je prostor za primjer prikazan u nastavku):

Zaključak će biti "Zdravo, amigo!"

Java 8 - Stream.collect (pridruživanje ()), Stream.forEach

Ispod ću pokušati navesti neke od drugih predloženih metoda, pokušavajući ih malo poboljšati, pri čemu je najistaknutiji dodatak korištenje Stream.collect operatora koji koristi pridružujući se Collectoru da simulira ono što String.join radi.

Arrays.deepToString (arr) ispisuje samo u jednom retku.

Da bih tablicu za ispis dobio kao dvodimenzionalnu tablicu, morao sam to učiniti:

Čini se da bi metoda Arrays.deepToString (arr) trebala prihvatiti niz razgraničenja, ali nažalost to nije slučaj.

Mogli bismo koristiti Arrays.toString (niz) za ispis jednodimenzionalnog niza i Arrays.deepToString (niz) za višedimenzionalne nizove.

Sada imamo opcije Stream i lambda za ispis niza.

Ispis jednodimenzionalnog niza:

Ispis višedimenzionalnog niza uključen za svaki slučaj, ako želimo ispisati višedimenzionalni niz, možemo koristiti Arrays.deepToString (niz) kao:

Sada treba napomenuti da se metoda Arrays.stream (T), koja u slučaju int vraća Stream k nama, a zatim metoda flatMapToInt () prikazuje svaki element toka sa sadržajem prikazanog toka, stvara primjenom predviđene funkcije prikaza na svaki element.

11, 12, 21, 22, 31, 32, 33
John, Bravo, Mary, Lee, Bob, Johnson
11
12
21
22
31
32
33
WC
bravo
Marija
zavjetrina
bob
Johnson

Različiti načini ispisa nizova na Javi:

korištenje toString ()

Ispis matrice matrice

Izlaz: Ljava.lang.String, @ 1ad086a Ljava.lang.String, @ 10385c1, Ljava.lang.String, @ 42719c Peti, šesti, sedmi, osmi

Po mom mišljenju, koristeći običnu petlju za je najlakši način za ispis niza. Ovdje imate primjerak koda na temelju vašeg intArray

To daje izlaz poput vaših 1, 2, 3, 4, 5

Nedavno sam naišao na ovaj post u Vanilli #Java. Nije baš prikladno pisati Arrays.toString (arr), a onda stalno uvozimo java.util.Arrays.

Imajte na umu da to nije trajna ispravka ni na koji način.Samo hack koji olakšava ispravljanje pogrešaka.

Ispis matrike izravno daje interni prikaz i hash kod. Sada sve klase imaju Object kao svoj roditeljski tip. Pa zašto ne hakirati Object.toString ()? Bez izmjena, klasa Objekta izgleda ovako:

Što ako se promijeni u:

Možete jednostavno dodati ovu modificiranu klasu putu puta prema razredbi dodavanjem sljedećeg u naredbeni redak: -Xbootclasspath / p: target / klase.

Sada, uz dostupnost deepToString (..) od Java 5, toString (..) se lako može promijeniti u deepToString (..) za dodavanje podrške za nizove koji sadrže druge nizove.

Otkrio sam da je ovo prilično koristan hack, a bilo bi sjajno kada bi Java mogla samo ovo dodati. Shvaćam potencijalne probleme s vrlo velikim nizovima, jer nizovi reprezentacije mogu biti problematični. Možda proslijedite nešto poput System.out ili PrintWriter za takve slučajeve.

Uvijek treba raditi bez obzira koju verziju JDK koristite:

Ovo će raditi ako Polje sadrži objekte. Ako Array sadrži primitivne tipove, možete koristiti klase omota, umjesto da ih pohranjujete izravno kao

Zamijenite ga s:

ažuriranje:

Da! Treba napomenuti da je pretvaranje matrice u niz objekata ili korištenje niza objekata skupo i može usporiti izvršenje. to se događa po prirodi Jave koja se zove autobox.

Dakle, samo za potrebe tiska, ne smije se koristiti. možemo napraviti funkciju koja uzima parametar kao parametar i ispisuje željeni format kao

Pogledajte video: JavaScript - Tutorijal 30 - For petlja i ispis elemenata niza (Lipanj 2020).

Pin
Send
Share
Send
Send