Gyakorlati alapok II.

Celsius-Fahrenheit váltó

 

Ismételjük meg a bevezető fejezet alapgondolatait:

 

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

 

Köztudott, hogy a hőmérséklet mérése az angolszász országokban, főleg az Egyesült Amerikai Államokban különbözik (Fahrenheit) az Európában elterjedt hőmérsékletméréstől (Celsius). Ez voltaképpen különböző fokbeosztású hőmérsékletmérő skálát jelent. Ennek ellenére az átváltás képlete viszonylag egyszerű:

 

F = C  - 9/5 + 32

C = (F  -  32) / 5/9

 

Továbbá alsó hőmérséklethatárként kell definiálnunk az abszolút 0 fokot, amely Celsius-skálán ‒273,15 °C, a Fahrenheit-skálán ‒459,67 °F, Kelvin-skálán pedig 0 K. Tehát ezen érték alá nem mehet sem Celsius-, sem Fahrenheit-érték. Ezt programozás-technikailag szabványos módon, azaz final módosítóval és nagybetűs elnevezéssel deklaráljuk a szamBekeres() metódusban:

 

final double ALSOHATARCELSIUS = -273.15;
final double ALSOHATARFAHRENHEIT = -459.67;

 

A képletekből és a konstans értékekből azonnal látszik, hogy mindvégig lebegőpontos számokkal fogunk játszadozni, ezért minden bemeneti és átmeneti adatot célszerű double típusként definiálni.

 

A szamBekeres() metódusban egy elöltesztelő ciklus ellenőrzi, hogy a felhasználó által bevitt hőmérséklet abszolút 0 fok feletti legyen:

 

if(valasztas.equals("1")){
    while (fok < ALSOHATARCELSIUS){
        System.out.println("Kérem, hogy -273.15 Celsius foknál magasabbat adjon meg!");
        bemenetiAdat = in.nextLine();
        fok = Double.parseDouble(bemenetiAdat);
        }
    }
    else if(valasztas.equals("2")){
        while (fok < ALSOHATARFAHRENHEIT){
            System.out.println("Kérem, hogy -459.67 Fahrenheit foknál magasabbat adjon meg!");
            bemenetiAdat = in.nextLine();
            fok = Double.parseDouble(bemenetiAdat);
        }
    }

 

Ha a bemeneti adat korrekt, akkor String - double típuskonverzió következik és a függvény átadja azt a megfelelő számító függvénynek: celsiusFahrenheit() vagy fahrenheitCelsius(). Az eredményt végül a kiiras() metódus szortírozza tovább és írja ki.

 

A kód nyilvánvalóan követi a jelen fejezetcsomagban ismertetett és folyamatosan gyakoroltatott külön metódusos kódszerkesztési elvet.

 

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){
    final double ALSOHATARCELSIUS = -273.15;
    final double ALSOHATARFAHRENHEIT = -459.67;
    Scanner in = new Scanner (System.in);
    String bemenetiAdat = new String();
    System.out.println ("\nKérem, hogy adja meg a fokot!");
    bemenetiAdat = in.nextLine();
    double fok = Double.parseDouble(bemenetiAdat);
    if(valasztas.equals("1")){
        while (fok < ALSOHATARCELSIUS){
            System.out.println("Kérem, hogy -273.15 Celsius foknál magasabbat adjon meg!");
            bemenetiAdat = in.nextLine();
            fok = Double.parseDouble(bemenetiAdat);
        }
    }
    else if(valasztas.equals("2")){
        while (fok < ALSOHATARFAHRENHEIT){
            System.out.println("Kérem, hogy -459.67 Fahrenheit foknál magasabbat adjon meg!");
            bemenetiAdat = in.nextLine();
            fok = Double.parseDouble(bemenetiAdat);
        }
    }
    return fok;
}

static double celsiusFahrenheit(double fok){
    return (fok * 1.8) + 32;
}

static double fahrenheitCelsius(double fok){
    return (fok - 32) * 0.5555;
}

static void kiiras(double fok, double eredmeny, String valasztas){
    if(valasztas.equals("1")){
        System.out.println("\n" + fok + " C = " + eredmeny + " F");
    }
    else if(valasztas.equals("2")){
        System.out.println("\n" + fok + " F = " + eredmeny + " C");
    }
}

public static void main(String[] args) {
Scanner in = new Scanner(System.in);
double fok = 0;
double eredmeny = 0;
String[] menu = new String[] {"1 - Celsius -> Fahrenheit", "2 - Fahrenheit -> Celsius", "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)) {
        fok = szamBekeres(valasztas);
        eredmeny = celsiusFahrenheit(fok);
        kiiras(fok, eredmeny, valasztas);
    }

    if("2".equals(valasztas)) {
        fok = szamBekeres(valasztas);
        eredmeny = fahrenheitCelsius(fok);
        kiiras(fok, 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 - Celsius -> Fahrenheit
2 - Fahrenheit -> Celsius
0 - Kilépés
1

Kérem, hogy adja meg a fokot!
-300
Kérem, hogy -273.15 Celsius foknál magasabbat adjon meg!
0

0.0 C = 32.0 F

Kérem válasszon az alábbi lehetőségekből:
1 - Celsius -> Fahrenheit
2 - Fahrenheit -> Celsius
0 - Kilépés
2

Kérem, hogy adja meg a fokot!
-500
Kérem, hogy -459.67 Fahrenheit foknál magasabbat adjon meg!
0

0.0 F = -17.776 C

Kérem válasszon az alábbi lehetőségekből:
1 - Celsius -> Fahrenheit
2 - Fahrenheit -> Celsius
0 - Kilépés
0

Viszlát!

 

Ellenőrzési segédlet: