Gyakorlati alapok

Vakáció!

 

www.informatika-programozas.hu - Ezt most meg kell tanulni!

 

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:

 

ó

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!

 

www.informatika-programozas.hu - Futtatható Java-kód!

 

 

 

 

 

 

 

 

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:

ó

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):

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!

 

www.informatika-programozas.hu - Futtatható Java-kód!

 

 

 

 

 

 

 

 

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:

ó

ció

áció

káció

akáció

vakáció