Gyakorlati alapok

Indul a visszaszámlálás!

 

A konkrét probléma: gyermekeim rákattantak a számítógépre. Ez önmagában nem baj, elvégre modern gyerekek lesznek, akik nem ragadnak le a kapánál, ám ezt az időtöltést kezdetben nyilvánvalóan szűrni és korlátozni kell. Erre több  lehetőségünk is van, első körben gondolhatunk a vekkerórára, amelyet adott időpontra húzunk fel: csörgéskor tehát vége a gépezésnek. A magam fajta programozó természetesen ilyen esetekben rögtön összedob egy funkcionális Java-alkalmazást. Az alábbi futtatható Java-kód természetesen még nem "elegáns" megoldás: nehezen futtatható és csak konzolos. A későbbiekben meg fogjuk írni ennek tetszetős, ablakos implementációját is.

 

A Java-nyelven belül a különböző időzítés-metódusok sok helyen előfordulnak, egyik fő implementációja a java.util.Timer, de található a swing-ben is. Az alábbi példakód mégsem ezekkel, hanem a futtatási szál (thread) késleltetésével trükközik. Ezt a Thread.sleep() metódus valósítja meg, amelynek paraméteréül a késleltetés hosszát kell megadnunk milliszekundumban. 1 másodperces késleltetés tehát így néz ki: Thread.sleep(1000).

 

Ezt a metódust kötelezően try-catch blokkba tennünk, erről, tehát a kivételkezelésről majd a későbbiekben szólunk, nélküle hibaüzenetet kapunk.

 

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

 

Szakértők részére!

Ők észre fogják venni és joggal tehetik szóvá, hogy a catch ág nincs lekezelve:

 

catch(InterruptedException ie){}

 

Tisztában vagyok vele, hogy "éles" projektben ilyet nem teszünk, ám ez csak egy olyan oktató példa, amelynek adott szintjén a kivételkezeléssel még nem is foglalkoztunk, következésképpen nincs értelme magyarázatok nélkül bármit is oda implementálni. Megjegyzem: komoly programozási szakkönyvek oktatási magyarázatok során ugyanígy tesznek. (Kérésre egy ilyen forráshivatkozást e-mailban elküldök.)

 

Az időegység-bekérést (perc-, vagy másodperc-visszaszámlálás? - String idoegysegBekeres) egy elöltesztelő ciklus ellenőrzi: a sec és min sztringeken felül semmi mást nem enged tovább.

 

Az időhosszt (int idoHossz) szintén egy elöltesztelő ciklus ellenőrzi, hogy értéke pozitív szám legyen.

 

Ezután be kell állítani a visszaszámlálás for ciklusának hosszát (int idoTartam), valamint a Thread.sleep() metódus milliszekundumos értékét, ahol:

int idoTartam = idoHossz;
idoHossz = 1000;
if(idoegysegBekeres.equals("min")){
    idoHossz = 60000;

}
 

A visszaszámlálás végén pedig megjelenik egy VÉGE! felirat. Nézzük meg futtatható, konzolos Java-változatot:

 

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

 

 

 

 

 

 

 


import java.util.Scanner;

public class Main{
    public static void main(String[] args) {
    Scanner in = new Scanner(System.in);
    System.out.println ("Másodperc (sec) vagy perc (min)?");
    String idoegysegBekeres = in.nextLine();
    while(!idoegysegBekeres.equals("sec") && !idoegysegBekeres.equals("min")){
        System.out.println ("Kérem, hogy csak 'sec' vagy 'min' adjon meg!");
        idoegysegBekeres = in.nextLine();
    }
    System.out.println ("Kérem adja meg az időmennyiséget!");
    String szamBekeres = in.nextLine();
    int idoHossz = Integer.parseInt(szamBekeres);
    while (idoHossz <= 0){
        System.out.println("Kérem, hogy csak pozitív egész számot adjon meg!");
        szamBekeres = in.nextLine();
        idoHossz = Integer.parseInt(szamBekeres);
    }
    int idoTartam = idoHossz;
    idoHossz = 1000;
    if(idoegysegBekeres.equals("min")){
        idoHossz = 60000;
    }

 

    System.out.println();

    for(int i = idoTartam; i > 0; i--){
        try{
            System.out.println(i);
            Thread.sleep(idoHossz);
        }catch(InterruptedException ie){}
    }
    System.out.println("VÉGE!");
    }
}

 

Végeredmény (például):

Másodperc (sec) vagy perc (min)?
ora
Kérem, hogy csak 'sec' vagy 'min' adjon meg!
sec
Kérem adja meg az időmennyiséget!
5


5
4
3
2
1
VÉGE!