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.

 

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

 

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:

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:

Nézzük meg a futtatható Java-kódot!

 

www.informatika-programozas.hu - Futtatható Java-kód!

 

 

 

 

 

 

 

 

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: