Sziasztok!
7) Java - Core Programming - User InputKicsit megkésve, de már itt is vagyok egy következő Java fejlesztési tutoriállal. Mielőtt
"komolyabb vizekre eveznénk", egy utolsó Core Programming fejezet következik, ami a felhasználói
"beavatkozásról", a bevitelről fog szólni.
Aki korábban fejlesztett már C#-ban, az csodálkozhat, hogy miért kell erről külön említést tenni, hiszen egyetlen metódussal le lehet rendezni egy sor beolvasását
(C# Console.ReadLine() ).
A Java is rendelkezik természetese alapvető olvasásra utaló metódusokkal, de ez korántsem arra való amire azt gondoljuk.
Ehelyett egy úgynevezett
Scanner osztályt használunk a sorok beolvasására.
Ez a Scanner osztály a java.util csomagban található meg, tehát használatához importolnunk kell.
Kód:
import java.util.Scanner;
Tanulni legegyszerűbben példákon keresztül lehet, ennek eleget téve nézzünk meg egy Integer típusú bevitelt.
Először is egy Scanner típusú változót kell deklarálnunk, ami egy úgymond referenciaként fog mutatni a példányosított objektumunkra.
Kód:
Scanner myInput = new Scanner(System.in);
A Scanner konstruktora egyfajta típust vár el, ami az elvégzendő műveletektől függ. Jelen esetben egy konzolos Input Streamre lesz szükségünk, szóval a System.in tökéletes lesz, ami az IO csomag BufferedStreamerje, stringként kiíratva valami ilyesmit kell kapjunk:
Kód:
java.io.BufferedInputStream@1b6d3586
Az új Scanner objektumunknak többféle függvénye is lesz, nekünk a nextInt() kell, mivel Integert várunk.
Kód:
int number = myInput.nextInt();
Miután eltároltuk ezt egy változóban, könnyen ki is írathatjuk, hogy megbizonyosodjunk sikerességünkről.
Kód:
System.out.println(number);
Persze nem csak Integert várunk el általában, ezért többféle függvényt is írtak erre, a teljes listáért
katt ide.A műveletek elvégzése végén pedig le is kell zárnunk ezt az input streamet, mielőtt másik streamet kezdenénk, ezt megtehetjük a Scanner osztály close() függvényével.
Kód:
myInput.close();
Ez eddig egyszerű volt, szinte túl egyszerű. Mi van ugyanis akkor, ha mi egy életkort szeretnénk beolvasni, ami egy Integer, de a felhasználó félreír valamit és egy betű is belekavarodik? Igen, egy
InputMismatchException kivételt kapunk, ami meg is állítja a programunk futását. Többféle módon is lehet ezt kezelni, a legegyszerűbb és egyben legmodernebb módszert mutatnám be, ami a try-with-resources körbekerítés.
JRE 1.7 alatt, ha jól emlékszem ez sajnos nem támogatott, ott a mezei try-catch megoldással kell elvégezni ezt a műveletet.
Try with resources utasítás..A megszokott try-catch kivételkezeléssel ellentétben, itt a try részben egy, vagy akár több erőforrást is deklarálhatunk. Erőforrásnak minősülnek azok az objektumok, amiket le kell zárnunk használat után. Erre jó a try-with-resources, ami lezárja nekünk a lezárható objektumokat. Lezárhatónak minősül minden olyan objektum, amelyik implementálja a java.lang.AutoCloseable (és ezzel a java.lang.Closeable) interfészt. (Interfészekről majd később..jóval később)
Ez alapján a kódunk:
Kód:
public class App {
public static void main(String[] args) {
try(Scanner scannerObject = new Scanner(System.in)){
int i = scannerObject.nextInt();
System.out.println(i);
}
catch(InputMismatchException e) {
System.out.println("Itt lehetne kezelni a kivételt");
}
}
}
Köszönöm a figyelmet,
következő tutoriálig pedig...
Happy Coding! :)