4. Tömbök és ciklusok gyakorlása
Stringek
A String egy olyan referencia típus, ami szöveget tud tárolni. A HelloWorld programonál már találkoztunk ezzel, ugyanis minden, ami idézőjelek közé van írva egy String.
A Stringeken leggyakrabban a az összefűzés (concatenate) műveletet használjuk, amit “összead” vagyis egymás után rak két Stringet.
String text = "Hello";
System.out.println(text + " World!");
Egy másik fontos metódus a length(), ami megadja a String hosszát. Ezen kívül még van sok más is, de egyelőre ezekkel nem foglalkozunk.
String text = "Hello";
System.out.println(text.length());
Tömbök
A tömböket úgy érdemes feldogni, mint egy változó (egy névvel azonosítható memóriaterület), ami egyszerre több értéket tárol. Az egyes értékekre a változó nevével és sorszámával tudunk hivatkozni.
Elősször nézzük meg, hogyan tudunk tömböket létrehozni:
// int tömb, értékek megadásával
int[] fibonacci = new int[]{ 1, 1, 2, 3, 5, 8 };
// mérettel megadás, 6 hosszú
int[] fibonacci = new int[6];
fibonacci[0] = 1;
fibonacci[1] = 1;
fibonacci[2] = 2;
fibonacci[3] = 3;
fibonacci[4] = 5;
fibonacci[5] = 8; // az 5 az utolsó index, mert 0-tól kezdjük a számozást
Egy tömb hosszát a tombNev.length -el tudjuk lekérdezni.
While és do while
Alapvetően két fontos ciklus van a Javaban, a for és a while ciklus.
A while az egyszerűbb, amíg teljesül a feltétel, addig végrehajtja az utasításokat:
while (feltetel) {
Utasitas1;
…
UtasitasN;
}
Ezt folyamdiagrammal így lehetne szemléltetni:
Ennek egy változata a hátultesztelős ciklus, ami végrehajtja az utasításokat, és amíg teljesül a feltétel, addig újra és újra végrehajtja.
do {
Utasitas1;
…
UtasitasN;
} while (feltetel);
For ciklus
A for ciklus egy kicsit komplikáltabb első ránézésre, de valójában csak egy egyszerűsítés.
A for utáni zárójelben három dolog van:
- (Amit az elején kell megcsinálni;
- Ami a feltétel, hogy folytassa a futtatást;
- Amit minden futás után meg kell csinálni)
for (inicializalas; feltetel; inkrementalas) {
Utasitas1;
…
UtasitasN;
}
Gyakran előfordul, hogy végig szeretnénk menni egy tömb összes elemén és műveleteket végezni rajtuk (ezért is használunk ilyenkor tömböt).
Erre a for ciklus a legkézenfekvőbb, írjuk ki a tömb összes elemét:
for (int i = 0; i < tombNev.length; i++) {
System.out.println(tombNev[i]);
}
Foreach ciklus
A foreach ciklus egy még tovább egyszerűsített ciklus, egy tömböt vagy kollekciót (hamarosan…) tudunk vele bejárni, de a sima for ciklussal szemben elveszítjük az (init, feltétel, inkrement) hármas módosításának lehetőségét.
// for (valtozotipus nev : tombnev)
for (int szam : fibonacci) {
System.out.println(szam);
}
Break, continue
Ha egy cikluson belül kiadjuk a break; utasítást, akkor a program kilép a legbelső ciklusból, és onnan folytatja tovább.
for (int i = 0; i < 10; i++) {
if (i == 5) break;
System.out.print(i + ",");
}
// Output: 0, 1, 2, 3, 4,
Ha a continue; utasítást használjuk, akkor a program kihagyja a ciklus hátralévő részét és a következő ciklusfutás elején folytatja.
for (int i = 0; i < 10; i++) {
if (i % 2 == 0) continue;
System.out.print(i + ",");
}
// Output: 1, 3, 5, 7, 9
Feladatok
Mintamegoldás
Közzéteszek egy mintamegoldást kommentekkel, a fenti leírás alapján már mindenkinek értenie kéne.
Aki még nem próbálta, de most már menne neki, az még próbálkozhat: https://github.com/Dawars/Trefort-Android-Szakkor/blob/master/src/Szakkor3Feladat.java
És a részletes megoldás: https://github.com/Dawars/Trefort-Android-Szakkor/blob/master/src/Szakkor3Megoldas.java
Új Gyakorlófeladat
Ennek a feladatnak az a célja, hogy kipróbálhasd és elmélyítsed az eddig tanultakat. A függvényeket megírtam, csak ki kell egészíteni: link
- Tömb elemeinek átlaga
- Ki kell számolni az $latex \LARGE 1+\frac{1}{2^2}+\frac{1}{3^2}+…+\frac{1}{n^2}$ összeget, addig amit ay utolsó tag nagyobb, mint eps.
- Írj egy for ciklust while ciklussal (írja ki egy tömb összes elemét)
- Szorgalmi: Fizetés a lehető legkevesebb érmével
- Adott egy m szám (az összeg, amit ki akarunk fizetni) és egy c tömb, hogy milyen pénzérmék állnak a rendelkezésünkre.
- A feladat, egy olyan program írása, ami tartalmaz egy int felvalt(int m, int[] c, int[] db) függvényt, ami visszaadja a minimális érmeszámot, amivel fel lehet váltani az összeget, valamint a db tömbben azt, hogy miből mennyi kell.
- A c érték szerint csökkenően tartalmazza az érméket.
- A jó megoldás tetszőleges ország pénzeire jó eredményt kell, hogy adjon
- Például: m = 42, c = [25 20 5 1] esetén a megoldás n = 4, db = [0 2 0 2]
Ha elkészültetek a feladatokkal, küldjétek el nekem emailben ([email protected]).