Gyakorlati alapok
Vakáció!
Az alábbi kód ötlete Kaczur Sándor - Programozási alapok című könyvéből származik. Remélem, hogy Tanár úr nem fog engem plágiummal vádolni, amikor ötletét egy külön fejezetben egy másfajta Java-kóddal implementálom. Egyébiránt ajánlom a kiváló könyvet minden Java-tanuló szíves figyelmébe!
A nagyon ötletes feladat a következő volt: implementáljuk a híres Vakáció! kiírást, amely során minden nap mindig eggyel több betűt írunk ki a táblára, ilyesformán:
ó
ió
ció
áció
káció
akáció
vakáció
A kód motorja egy for ciklus, amely a vakáció karakterfüzért (String) pörgeti a substring() metóduson keresztül. A metódusról volt már szó a String című fejezetben: segítségével tetszőleges hosszban vághatunk ki elemeket karakterfüzérből. Emlékezzünk vissza arra is, hogy a Unicode-kódolás miatt (Karakter című fejezet) a Java-nyelv ismeri a népi-nemzeti karaktereket is. Ezt most kihasználjuk olyan formán, hogy a vakáció sztringet mélymagyar vesszős betűkkel adjuk meg.
Nézzük meg a futtatható Java-kódot!
public class Main {
public static void main(String[] args) {
String vakacio = "vakáció";
for(int i = vakacio.length() - 1; i >= 0; i--) {
System.out.println(vakacio.substring(i, vakacio.length()));
}
}
}
Végeredmény:
ó
ió
ció
áció
káció
akáció
vakáció
Egy kissé nehezebb dolgunk van, ha merő büszkeségből kizárjuk a substring() metódus használatát, hiszen ekkor nekünk kell gondoskodni a substring megfelelő kihasításáról. Ráadásként nehezítsük a feladatot egy karaktertömb használatával (char [] vakacio = new char[]{'v', 'a', 'k', 'á', 'c', 'i', 'ó'}), bár a stringelemekre való hivatkozás is a tömbökhöz hasonló, azaz indexelt. Ennek azonban egyik következménye, hogy egyszerre csak 1 elemhez tudunk hozzáférni!
Első konkrét, implementációs gondolatunk az lehet, hogy egybeágyazott for ciklusokat kell bevetnünk (Ágyazzunk be a for ciklusnak! (az egybeágyazott for ciklusok) című fejezet):
-
a külső, főciklus nyomtatja a karaktertömb elemeit mindig vakacio.length hosszban,
-
a belső, alciklus végzi a substring kihasítását alsoHatar és vakacio.length értékek között.
Mivel a substring kihasítása "kézzel" történik, nekünk kell gondoskodni a hasítás kezdő-, és végindexéről. Mivel az utóbbi fix pozíciójú, hiszen mindig vakacio.length értékig tart, ezért csak a kezdőindexet kell megfelelően menedzselnünk; ezt láthatjuk az alsoHatar változó használatában.
Természetesen a probléma egyéb iteráló műveletekkel is megoldható (Dönteni kell! (do - while) című fejezet).
Nézzük meg a futtatható Java-kódot!
public class Main {
public static void main(String[] args) {
char [] vakacio = new char[]{'v', 'a', 'k', 'á', 'c', 'i',
'ó'};
int alsoHatar = 6;
for(int i = 0; i < vakacio.length; i++){
for(int j = alsoHatar; j <
vakacio.length; j++){
System.out.print(vakacio[j]);
}
alsoHatar--;
System.out.println();
}
}
}
Végeredmény:
ó
ió
ció
áció
káció
akáció
vakáció