Gyakorlati alapok II.
Kalmárkodjunk! (EUR-HUF váltó)
Nem bonyolult, egyúttal érdekes program az alábbi pénzváltó: néhány bemeneti adat megadásával pontos és hatékony HUF-EUR váltó Java-alkalmazás kerekíthető belőle. Ezek a bemeneti adatok:
-
aktuális EUR vételi-eladási árfolyamok (napiarfolyam.hu adatai alapján),
-
felhasználótól bekért eladási HUF összege,
-
felhasználótól bekért vételi EUR összege.
Az aktuális árfolyamot kézzel kell beírnunk...
double veteliEuroArfolyam = 303;
double eladasiEuroArfolyam = 321;
...de természetesen a későbbiekben látni fogjuk, hogy automatizálhatjuk is.
A programban semmi programozás-technikai különlegesség nincs, kivéve egyet. A szamBekeres() függvény ellenőrzi le a felhasználótól bekért pénzösszeg helyességét.
Végeredményben tökéletesen mindegy, hogy EUR vagy HUF kerül a függvénybe, mindkettőnek 2 alapkövetelménye van:
-
az összeg nem lehet 0 vagy annál kisebb,
-
nem kerülhet a rendszerbe nem numerikus karakter.
Ezt a kötelező ellenőrzést sokféleképpen implementálhatjuk, most azonban a kivételkezeléssel fogunk elbabrálni: ha a JVM dob egy NumberFormatException kivételt, akkor tudjuk, hogy a felhasználó rossz, nem numerikus karaktereket adott meg, amelyet a JVM képtelen volt számmá konvertálni. Ettől függetlenül a try-catch blokkpár felhasználásával elkaptuk a problémát:
do{
String szamString = olvaso.nextLine();
try{
szam = Integer.parseInt(szamString);
}
catch (NumberFormatException nfx) {
System.out.println("Hiba történt adatbevitelkor!");
szam = -1;
}
}while (szam < 0);
Ugyanakkor a main() függvényben lévő bekérés biztosítja, hogy az adatbevitelt meg lehessen ismételni.
import java.util.Scanner;
public class Main {
public static double szamBekeres() {
Scanner olvaso = new Scanner(System.in);
double szam = 0;
do{
String szamString = olvaso.nextLine();
try{
szam = Integer.parseInt(szamString);
}
catch (NumberFormatException nfx) {
System.out.println("Hiba történt adatbevitelkor!");
szam = -1;
}
}while (szam < 0);
return szam;
}
public static void main(String[] args) {
Scanner olvaso = new Scanner(System.in);
double veteliEuroArfolyam = 303;
double eladasiEuroArfolyam = 321;
double eladasiEuro = 0;
while(true) {
System.out.println("Kérem válasszon az alábbi lehetőségekből:");
System.out.println("HUF-eladás -> EUR-vétel(1) - EUR-eladás -> HUF vétel(2) -
Kilépés(3)");
String valasztas = olvaso.nextLine();
if ("1".equals(valasztas)) {
System.out.println("Kérem, hogy adja meg az összeget (HUF)!");
double eladasiForint = szamBekeres();
eladasiEuro = eladasiForint / eladasiEuroArfolyam;
double maradek = eladasiForint % eladasiEuroArfolyam;
System.out.println("Ön " + eladasiForint + " HUF-ért " + eladasiEuro
+ " EUR-t
fog kapni, a maradék pedig " + maradek + " HUF lesz.");
System.out.println();
}
if ("2".equals(valasztas)) {
System.out.println ("Kérem, hogy adja meg az összeget (EUR)!");
eladasiEuro = szamBekeres();
double veteliForint = 0;
veteliForint = eladasiEuro * veteliEuroArfolyam;
System.out.println("Ön " + eladasiEuro + " EUR-ért " + veteliForint + " HUF-t
fog kapni.");
System.out.println();
}
if ("3".equals(valasztas) {
System.out.println("\nViszlát!");
System.exit(0);
}
}
}
}
Végeredmény:
Kérem
válasszon az alábbi lehetőségekből:
HUF-eladás -> EUR-vétel(1) - EUR-eladás -> HUF vétel(2) - Kilépés(3)
1
Kérem, hogy adja meg az összeget (HUF)!
30300
Ön 30300.0 HUF-ért 94.39252336448598 EUR-t fog kapni, a maradék pedig 126.0
HUF lesz.
Kérem válasszon az alábbi lehetőségekből:
HUF-eladás -> EUR-vétel(1) - EUR-eladás -> HUF vétel(2) - Kilépés(3)
1
Kérem, hogy adja meg az összeget (HUF)!
32100
Ön 32100.0 HUF-ért 100.0 EUR-t fog kapni, a maradék pedig 0.0 HUF lesz.
Kérem válasszon az alábbi lehetőségekből:
HUF-eladás -> EUR-vétel(1) - EUR-eladás -> HUF vétel(2) - Kilépés(3)
2
Kérjük adja meg az összeget (EUR)!
1000
Ön 1000.0 EUR-ért 303000.0 HUF-t fog kapni.
Kérem válasszon az alábbi lehetőségekből:
HUF-eladás -> EUR-vétel(1) - EUR-eladás -> HUF vétel(2) - Kilépés(3)
3
Viszlát!