Szinte minden program kér be adatokat a felhasználótól a működése során. Néha elképzelhető, hogy nincs adatbekérés, ekkor a program minden elindításkor pontosan ugyanazt az eredményt fogja előállítani. Ezek a programok inkább gyakorlás, tanulás során fordulnak elő. Az adatok bekérésével sokkal interaktívabb és érdekesebb programokat lehet készíteni, épp ezért most ezt szeretném megmutatni Java nyelvben.
Kezdjük talán ott, hogy honnan tud egy program adatokat beolvasni
A legtipikusabb eset, hogy használunk egy alkalmazást vagy egy weboldalt és a megfelelő helyekre beírjuk az adatokat, például egy keresett szöveget, email címet, jelszót, stb… Egy másik lehetséges megoldás, amikor a szükséges adatokat a program különböző fájlokból olvassa ki. Az első eset tipikusan felhasználói adatok bekérésére vonatkozik, míg a fájlokban lévő adatokat inkább maguk a programok állítják elő és olvassák.
Amit mi most meg fogunk nézni, az az első eset lesz, de ebben a blogcikkben nincs lehetőségünk egy teljes weboldalt felépíteni. Épp ezért a mi programunk a fejlesztői környezeten (Eclipse, IntelliJ, NetBeans, …) keresztül fog bekérni adatokat. Ha még nem találkoztál a fejlesztő környezet kifejezéssel, akkor előbb érdemes egy könnyebb feladattal kezdeni, én a Hello World alkalmazást javaslom.
Hogyan tudunk adatokat bekérni?
Szerencsére, mint oly sok mindenre, a Java-ban erre is létezik egy előre elkészített lehetőség, amit nekünk „már csak” használni kell. Sőt, nem is csak egy fajta módszer létezik adatok beolvasásra, hanem több és mindegyiknek megvan az előnye, hátránya. Így több fajta lehetőség közül is tudunk választani.
A bemutatott megoldás a Scanner nevű könyvtár alapszintű használata lesz. A Scanner több helyről is tud adatokat beolvasni, így egy sokrétű megoldás, bár van néhány gyengepontja.
Amit még szeretnék kiemelni, hogy most nem nézünk meg minden részletet aprólékosan, mert feltételezem, hogy inkább még csak ismerkedsz a programozással, ezért néhány dolgot lehetetlen lenne most írásban elmagyarázni. Próbáljunk meg fókuszálni a mechanizmusra, a fontos kódsorokra és megérteni, hogy pontosan milyen utasításokkal tudunk adatokat beolvasni. Viszont a feladat teljes körű megértéséhez érdemes ismerni a Függvények fogalmát és a Programok alapvető működését. Ha ezekkel tisztában vagy, akkor viszont vágjunk bele!
A feladat
A feladat legyen az, hogy kérjük be a felhasználó nevét, születési évét, hónapot és napot majd jelenítsük meg ezeket az értékeket a megfelelő formátumban.
A megoldás
Először megmutatom a teljes megoldást, utána pedig megpróbálom soronként elmagyarázni.
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
String name = "";
int birthYear = 0;
int birthMonth = 0;
int birthDay = 0;
System.out.print("Step #1: Please tell me your Name: ");
name = input.nextLine();
System.out.print("Step #2: Please tell me your Birth Year: ");
birthYear = input.nextInt();
System.out.print("Step #3: Please tell me your Birth Month: ");
birthMonth = input.nextInt();
System.out.print("Step #4: Please tell me your Birth Day: ");
birthDay = input.nextInt();
System.out.println(name + " born on " + birthYear + "." + birthMonth + "." + birthDay + ".");
input.close();
}
Első lépésként létrehozunk egy Scanner-t és rögtön be is állítjuk, hogy fejlesztői környezet ablakán keresztül szeretnénk adatokat beolvasni:
Scanner input = new Scanner(System.in);
Anélkül, hogy részletesen belemennénk, ezzel a leírással tudunk létrehozni egy Scanner-t és a System.in
fogja jelezni, hogy honnan szeretnénk adatokat bekérni.
A következő szekcióban létrehozzuk a megfelelő változókat, ahová majd letároljuk a beolvasott adatokat, a nevet, mint szöveg és 3 darab számérték típusú változót az évnek, hónapnak, napnak:
String name = "";
int birthYear = 0;
int birthMonth = 0;
int birthDay = 0;
Most, hogy ezekkel megvagyunk, elkezdődhet az adatok bekérése.
Minden adatbekérés előtt a program megjeleníti a megfelelő üzenetet, ami azért fontos, hogy a felhasználó tudja, hogy milyen adatot kell megadni. A kiírató utasításnak csak informatív szerepe van, bármi szerepelhetne benne. Szöveg beolvasása:
System.out.print("Step #1: Please tell me your Name: ");
name = input.nextLine();
Szöveget mindig a nextLine()
utasítással tudunk beolvasni a felhasználótól.
Számértékek beolvasása:
System.out.print("Step #2: Please tell me your Birth Year: ");
birthYear = input.nextInt();
System.out.print("Step #3: Please tell me your Birth Month: ");
birthMonth = input.nextInt();
System.out.print("Step #4: Please tell me your Birth Day: ");
birthDay = input.nextInt();
A számértékeket pedig mindig a nextInt()
nevű utasítással tudunk beolvasni.
A nehezén túl is vagyunk!
A végére marad az eredmény megjelenítése egy sima kiírató utasítással, ami megjeleníti a változók aktuális tartalmát (a felhasználótól beolvasott adatokat):
System.out.println(name + " born on " + birthYear + "." + birthMonth + "." + birthDay + ".");
Egy dologot pedig nem szabad elfelejtenünk! A Scanner-t mindig le kell zárni, ha már nem akarjuk használni a programban:
input.close();
Gratulálok, ezzel el is készült a programunk!
Miért nem teljes értékű ez a megoldás?
Nagyon szuper, hogy sikerült elkészítenünk ezt a programot, de hozzá kell tennünk, hogy ez a program még nem egy teljes körű megoldás. Ideális esetben működik, de vegyük észre, hogy sehol sem vizsgáljuk a beolvasott adatokat. Nem ellenőrizzük, hogy a felhasználónk nem 300 éves-e például. Vagy arra sem reagálunk, ha a felhasználó a szám helyett véletlenül szöveget írt be.
Ez nem baj, most jelenleg nem is az volt a cél, hogy egy minden esetben jól működő alkalmazást készítsünk. A cél inkább az volt, hogy megmutassam, hogyan tudunk adatokat bekérni. Ezekkel az adatokkal pedig utána már tetszőlegesen tudunk dolgozni, de hogy ne kelljen még holnap reggel is ezt a blogcikket olvasnod, ezért az amúgy fontos ellenőrzéseket most kihagytam.
A teljes feladatot innen tudod letölteni! Sok sikert!
Remélem tetszett ez a blogcikk és hasznosnak találtad! Ha még olvasgatnál, de inkább valamilyen mentális tartalomra vágysz, akkor ajánlom a Hogyan kezdj el Programozást tanulni? cikkemet, ha pedig további technikai témák érdekelnek, akkor ajánlom a Feltételvizsgálatról szóló írásomat!

Szia, Bajor Tamás vagyok, a Programozz Te Is oldal alapítója és oktatója. Köszi, hogy itt vagy és éppen az én cikkem olvasására fordítod a drága idődet! Azért dolgozom minden nap, hogy neked segítsek a programozás világában minél profibban elmélyülni. A cikkek egyetlen írójaként rengeteg munkát és energiát fektetek mind az oldalba, mind pedig az oktatásba!
Arra kérlek, ha tetszett cikk amit olvastál vagy szívesen veszed az ingyenes anyagokat akkor dobj egy Like-ot a Facebook-on, ezzel is támogatva a munkámat. Neked ez egy apró kattintás, nekem pedig hatalmas segítség!