Gyakorlati alapok II.

Konkrét példa: döntsük már el, hogy szám-e vagy szöveg!

 

A kivétel kezelése alapvetően "passzív" tevékenység, azaz tisztában vagyunk a programozás-technikai vészhelyzetekkel és megpróbálunk ezekre optimálisan reagálni.

 

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

 

Sok programozó azonban még ennél is tovább lép és egyenesen -valamilyen magasabb szintű cél érdekében-,  "aktív" módon váltja ki a kivételt.

 

Ennek demonstrálására nézzük meg az alábbi feladatot!

 

Adott egy egyszerű szövegbeviteles probléma, amely során nem tudjuk, hogy a felhasználó mit gépel be, szöveget vagy számot. A megoldás természetesen többféle módon is implementálható, itt és most azt fogjuk kihasználni, hogy a JVM nem tud szöveget (string típusú karakterfűzért) számmá konvertálni (itt az Integer.parseInt() függvénnyel), hanem ekkor NumberFormatException kivételt dob. A kivételt azonban elkapjuk a catch ágban és ekkor bizonyosak lehetünk abban, hogy a bevitt adat nem szám.

 

Az alábbi futtatható Java-kód a fenti feltételeket vizsgálja string és int típusú numerikus egész bemeneti adat esetében.

 

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

 

A program nincs felkészítve numerikus lebegőpontos adat vizsgálatára, ebből következően minden ilyen jellegű adatbevitelt, például...

...nem konvertálhatónak, azaz NEM (int) számnak fog értékelni.

 

(Zárójelben jegyzem meg, hogy a JVM egyébként is kényes a rossz tizedesjegy-karakterekre és vessző /,/ használata esetén szintén azonnal dob egy NumberFormatException kivételt, természetesen ekkor Double.parseDouble() függvényt használunk.)

 

Továbbá a program nem végez alsó és felső határ-ellenőrzést sem (itt elsősorban az int adattípus tárkorlátaira gondolok), így könnyen dobhat ilyen jellegű, de már lekezeletlen kivételt. Teszteléskor mindezeket vegyük figyelembe!

 

Ezen problémák megoldása a kód alapján legyen a Tisztelt Olvasó házi feladata.

 

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);
    String adat = "";
    int szam = 0;
    boolean nemSzam = false;
    String[] menu = new String[] {"1 - Bevitel", "0 - Kilépés"};

    while(true) {
        System.out.println("\nKérem válasszon az alábbi lehetőségekből: ");
        for(int i = 0; i < menu.length; i++) {
            System.out.println(menu[i]);
        }
    String valasztas = in.nextLine();
    if("1".equals(valasztas)) {
        adat = "";
        szam = 0;
        nemSzam = false;
        System.out.println("Kérem, hogy adja meg az adatot!");
        adat = in.nextLine();
        try{
            szam = Integer.parseInt(adat);
        }
        catch(NumberFormatException nfe){
            nemSzam = true;
        }
        if(nemSzam){
            System.out.println("Az adat: " + adat + " NEM (int) szám!");
        }
        else
            System.out.println("Az adat: " + szam + " szám!");
        }

        if("0".equals(valasztas)) {
            System.out.println("\nViszlát!");
            System.exit(0);
            }
        }
    }
}

 

Végeredmény:

Kérem válasszon az alábbi lehetőségekből:
1 - Bevitel
0 - Kilépés
1
Kérem, hogy adja meg az adatot!
1
Az adat: 1 szám!

Kérem válasszon az alábbi lehetőségekből:
1 - Bevitel
0 - Kilépés
1
Kérem, hogy adja meg az adatot!
23
Az adat: 23 szám!

Kérem válasszon az alábbi lehetőségekből:
1 - Bevitel
0 - Kilépés
1
Kérem, hogy adja meg az adatot!
43330
Az adat: 43330 szám!

Kérem válasszon az alábbi lehetőségekből:
1 - Bevitel
0 - Kilépés
1
Kérem, hogy adja meg az adatot!
s
Az adat: s NEM (int) szám!

Kérem válasszon az alábbi lehetőségekből:
1 - Bevitel
0 - Kilépés
1
Kérem, hogy adja meg az adatot!

Az adat: NEM (int) szám!

Kérem válasszon az alábbi lehetőségekből:
1 - Bevitel
0 - Kilépés
1
Kérem, hogy adja meg az adatot!
3.14
Az adat: 3.14 NEM (int) szám!

Kérem válasszon az alábbi lehetőségekből:
1 - Bevitel
0 - Kilépés
1
Kérem, hogy adja meg az adatot!
cirbolya
Az adat: cirbolya NEM (int) szám!

Kérem válasszon az alábbi lehetőségekből:
1 - Bevitel
0 - Kilépés
0

Viszlát!