Gyakorlati alapok

A for ciklus

 

A számítógép gyakran dolgozik ismétlődő adatokkal, metódusokkal, ennek során valamilyen tevékenységet ismétel (idegen szóval iterál - iteration) valamennyi ideig vagy addig, amíg valami más meg nem szakítja. Mivel a programkód végrehajtása alapjában véve szekvenciális, pontosabban a main() főprogramban mindig felülről lefelé halad...

 

utasítás

utasítás

utasítás

utasítás

 

...ezért bármilyen tevékenység-ismétlést kódismétléssel könnyű leprogramoznunk. Például írjuk ki a konzolra ötször, hogy Hello World!:

 

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

 

 

 

 

 

 

 

 

public class Main {
    public static void main(String[] args) {
    System.out.println("Hello World!");
    System.out.println("Hello World!");
    System.out.println("Hello World!");
    System.out.println("Hello World!");
    System.out.println("Hello World!");
    }
}

 

Végeredmény:

Hello World!

Hello World!

Hello World!

Hello World!

Hello World!

 

Ez nem túl elegáns megoldás és nincs is sok értelme. Az ismétlődés legegyszerűbb programozási szerkezete a for ciklus:

 

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

 

 

 

 

 

 

 

 

public class Main {
    public static void main(String[] args) {
        for(int i = 1; i <= 5; i++){
            System.out.println("Hello World!");
        }
    }
}

 

Végeredmény:

Hello World!

Hello World!

Hello World!

Hello World!

Hello World!

 

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

 

A for ciklus fejléce kulcsfontosságú...

 

for (i = kezdőérték; i <= végérték; léptetés)

 

...mert benne deklaráljuk és inicializáljuk, hogy honnan indul a ciklus (int i = 1), meddig tart (i <= 5) és merrefelé (i++). Programozói konvenció, hogy a ciklusváltozót i betűvel jelöljük (egyesek az iterátor szóra, mások az index szóra vezetik vissza), több (egybeágyazott) for ciklus esetén pedig j, k, l betűkkel.

 

Továbbgondolva a fejléc információit, észrevehetjük, hogy a fejléc deklarációinak nincs közvetlen hatása a ciklus belső működésére, csupán annyi, hogy művelet hányszor legyen ismételve. Tehát a ciklus működéséhez alapértelmezésben nincs további feltétel. Ez a "feltételnélküliség" a meghatározó különbség az elöltesztelő és a hátultesztelő ciklussal szemben, ahol a ciklus működése egy vagy több feltételhez kötött.

 

A fentiekből következően egy növekvő léptetést alapjában véve szekvenciálisan így is le tudunk programozni, bár ez manapság már hajmeresztő megoldás, éppen ezért ettől mindenkit óva intek:

 

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

 

 

 

 

 

 

 

 

public class Main {
    public static void main(String[] args) {
    int i = 1;
    System.out.print(i + " ");
    i++;
    System.out.print(i + " ");
    i++;
    System.out.print(i + " ");
    i++;
    System.out.print(i + " ");
    i++;
    System.out.print(i + " ");
    }
}

 

Végeredmény:

1 2 3 4 5

 

Nézzük meg a megoldást a for ciklus bevetésével:

 

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

 

 

 

 

 

 

 

 

public class Main {
    public static void main(String[] args) {
        for(int i = 1; i <= 5; i++){
            System.out.print(i + " ");
        }
    }
}

 

Végeredmény:

1 2 3 4 5

 

Természetesen a for ciklus nemcsak növekvő, hanem csökkenő léptetésre is beállítható:

 

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

 

 

 

 

 

 

 

 

public class Main {
    public static void main(String[] args) {
        for(int i = 5; i >= 1; i--){
            System.out.print(i + " ");
        }
    }
}

 

Végeredmény:

5 4 3 2 1

 

Most pedig a tudás birtokában akasszuk ki a fordítót egy végtelen ciklussal! (A végtelen ciklusról részletesen írok a következő fejezetben.) Itt egy kicsit trükköznünk kell, mert az Eclipse rendkívül magas szintű hibadetektálása azonnal hibát jelez, ha a ciklus végértékét rosszul adjuk meg, de természetesen átverhető. Például a végértéket (int a) mindig növeljük a ciklusban (a++).

 

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

 

A végtelen ciklus futása a konzolos rész piros négyszöggombjával állítható le:

 

www.informatika-programozas.hu - Stop!

 

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

 

 

 

 

 

 

 

 

public class Main {
    public static void main(String[] args) {
    int a = 100;
        for(int i = 0; i < a; i++){
            a++;
            System.out.println(i);
        }
    }
}

 

Végeredmény:

végtelen ciklus

 

Valójában végtelen ciklus generálása ennél kisebb erőfeszítéssel is megoldható, ekkor egyszerűen nem töltjük ki a for ciklus fejlécét (for(; ;)):

 

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

 

 

 

 

 

 

 

 

public class Main {
    public static void main(String[] args) {
        for(; ;){
            System.out.println("Végtelen ciklus...");
        }
    }
}

 

Végeredmény:

végtelen ciklus