Gyakorlati alapok II.
Kis magyar Forma 1: kétsebességes lóerő-kW váltó
Az előző, Kis meteorológia: Celsius-Fahrenheit váltó című fejezet programozás-technikai megoldásait már viszonylag könnyű átültetni egy másik, de hasonló jellegű probléma megoldásába.
A lóerő-kW és kW-lóerő váltás folyamatosan előforduló igény a gépkocsik adminisztrálása során.
Képletei egyszerűek...
1 Le = 0,745 kW
1 kW = 1,34 Le
...így az átváltások egyszerű szorzásokkal megoldhatók. A felhasználó szabadon választhat a választási irányok között (kW-lóerő vagy lóerő-kW), ám a bemeneti adatok hasonló jellege miatt azt nem tudjuk ellenőrizni, hogy a felhasználó megfelelő jellegű bemeneti adatot ad-e meg: tehát kW-lóerőt kíván számolni, de mégis lóerő-értéket ír be.
Az összes többi, standardnak mondható ellenőrzési rutin viszont kötelezően beépítendő, ezek:
-
nem megengedett, ha felhasználó nem ad meg bemeneti adatot,
-
ne írjon be 0-t vagy kevesebbet, illetve elméletileg lehetséges felső határt is beállítani, hiszen nincsen például 5000 kW teljesítményű autó, állapítsunk meg felső határnak mondjuk 10000-t, ami nyilvánvalóan lehet kW és lóerő is,
-
csakis numerikus értékek és tizedespont (.) fogadása,
-
csak közvetetten, de a felső határból következik, hogy maximum 6 karakterszámot állíthatunk be, tehát elméletileg a legnagyobb begépelhető szám a 99999. Ezt a korlátozást szintén meg kell tennünk, másként a gonoszkodó felhasználó elkezdhet tesztelgetni, például: 3,1444444444444444444. Ugyanakkor ez a határérték még megfelelő pontosságot képes biztosítani, ha valaki komolyan veszi az adatbevitelt: például 343.45 lóerő.
-
Tizedespont nem lehet az első és utolsó karakterpozícióban, illetve nem szerepelhet 1-nél többször.
Mindezt az adatEllenorzes() függvénybe gyömöszöljük be és addig nem is engedjük a programot továbblépni, amíg a felhasználó a fenti hibák egyikét elköveti.
A kód nyilvánvalóan követi a jelen fejezetcsomagban ismertetett és folyamatosan gyakoroltatott külön metódusos kódszerkesztési elvet, így keletkeztek a következő működtető függvények:
-
szamBekeres(),
-
adatEllenorzes(),
-
kWLoero(),
-
loeroKW();
-
kiiras();
-
main().
Nézzük meg a futtatható Java-kódot!
import java.util.*;
public class Main {
static double szamBekeres(String valasztas){
double adat = 0;
boolean rosszBemenetiAdat = false;
Scanner in = new Scanner(System.in);
String bemenetiAdat = new String();
System.out.println ("\nKérem, hogy adja meg az értéket!");
bemenetiAdat = in.nextLine();
rosszBemenetiAdat = adatEllenorzes(bemenetiAdat);
while(rosszBemenetiAdat ==
true){
rosszBemenetiAdat = false;
System.out.println("Kérem, hogy csak
megfelelő karaktereket
(max.
5 numerikus karakter + 1 tizedespont),"
+ "\n0-nál nagyobb értéket adjon
meg!");
bemenetiAdat = in.nextLine();
rosszBemenetiAdat =
adatEllenorzes(bemenetiAdat);
}
adat = Double.parseDouble(bemenetiAdat);
return adat;
}
static boolean adatEllenorzes(String bemenetiAdat){
Scanner in = new Scanner(System.in);
boolean rosszAdat = false;
char karakter;
double adat = 0;
if(bemenetiAdat.length() < 1 || bemenetiAdat.length() > 6){
rosszAdat = true;
return rosszAdat;
}
for(int i = 0; i < bemenetiAdat.length(); i++){
karakter = bemenetiAdat.charAt(i);
if(karakter == '1'
|| karakter
== '2'
|| karakter
== '3'
|| karakter
== '4'
|| karakter
== '5'
|| karakter
== '6'
|| karakter
== '7'
|| karakter
== '8'
|| karakter
== '9'
|| karakter
== '0'
|| karakter
== '.'){
continue;
}
else
rosszAdat =
true;
return
rosszAdat;
}
if((bemenetiAdat.charAt(0) == '.') || (bemenetiAdat.charAt(bemenetiAdat.length()
- 1) == '.')){
rosszAdat = true;
return rosszAdat;
}
int szamlalo = 0;
for(int i = 0; i < bemenetiAdat.length(); i++){
if(bemenetiAdat.charAt(i) == '.'){
szamlalo++;
}
}
if(szamlalo > 1){
rosszAdat = true;
return rosszAdat;
}
adat = Double.parseDouble(bemenetiAdat);
if(adat <= 0 || adat > 10000){
rosszAdat = true;
return rosszAdat;
}
return rosszAdat;
}
static double kWLoero(double adat){
return (adat * 1.34);
}
static double loeroKW(double adat){
return (adat * 0.745);
}
static void kiiras(double adat, double eredmeny, String valasztas){
if(valasztas.equals("1")){
System.out.println("\n" + adat + " kW
= " + eredmeny + " lóerő");
}
else if(valasztas.equals("2")){
System.out.println("\n" + adat + "
lóerő = " + eredmeny + " kW");
}
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
double adat = 0;
double eredmeny = 0;
String[] menu = new String[] {"1 - kW -> lóerő", "2 - Lóerő
-> kW", "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 = szamBekeres(valasztas);
eredmeny = kWLoero(adat);
kiiras(adat, eredmeny, valasztas);
}
if("2".equals(valasztas)) {
adat = szamBekeres(valasztas);
eredmeny = loeroKW(adat);
kiiras(adat, eredmeny, valasztas);
}
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 - kW -> lóerő
2 - Lóerő -> kW
0 - Kilépés
1
Kérem, hogy adja meg az értéket!
qw
Kérem, hogy csak megfelelő karaktereket adjon meg!
0.7.
Kérem, hogy csak megfelelő karaktereket adjon meg!
.0
Kérem, hogy csak megfelelő karaktereket adjon meg!
0.9
0.9 kW = 1.2060000000000002 lóerő
Kérem válasszon az alábbi lehetőségekből:
1 - kW -> lóerő
2 - Lóerő -> kW
0 - Kilépés
2
Kérem, hogy adja meg az értéket!
0.7.
Kérem, hogy csak megfelelő karaktereket adjon meg!
34
34.0 lóerő = 25.33 kW
Kérem válasszon az alábbi lehetőségekből:
1 - kW -> lóerő
2 - Lóerő -> kW
0 - Kilépés
1
Kérem, hogy adja meg az értéket!
1
1.0 kW = 1.34 lóerő
Kérem válasszon az alábbi lehetőségekből:
1 - kW -> lóerő
2 - Lóerő -> kW
0 - Kilépés
2
Kérem, hogy adja meg az értéket!
1
1.0 lóerő = 0.745 kW
Kérem válasszon az alábbi lehetőségekből:
1 - kW -> lóerő
2 - Lóerő -> kW
0 - Kilépés
0
Viszlát!
Ellenőrzési segédlet:
-
1 Le = 0,745 kW
-
1 kW = 1,34 Le
-
10 Le = 7,45 kW
-
10 kW = 13,4 Le