Inlezen van een gebroken getal |
Dit programma maakt gebruik van de prompt en de methode readLine en de conversie naar een double.
Conversie van een ingetypte energie in Nm naar Wh Geef de energie in Nm: 3000 Dat is 0.833333 Wh |
import java.io.*;
public class ConversieApp {
// Stap1: een constante waarde
static final int NM_PER_WH = 3600;
public static void main( String args[] ) throws IOException {
// Stap2: declareren van double
double newtonMeters, // aantal Nm
wattuur; // aantal Wh
// Stap3: afdrukken van de vraag
System.out.println( "Conversie van een ingetypte energie in Nm naar Wh" );
System.out.print("Geef de energie in Nm: ");
System.out.flush();
// Stap4: inlezen van het getal
String buffer;
DataInputStream cin = new DataInputStream(System.in);
try {
buffer = cin.readLine();
} catch (java.io.IOException e) {
buffer = "0.0";
}
// Stap5: conversie van een String naar een double
try {
newtonMeters = Double.valueOf(buffer).doubleValue();
} catch( java.lang.NumberFormatException e) {
newtonMeters = 0.0;
}
wattuur = newtonMeters / NM_PER_WH;
System.out.println("Dat is " + wattuur + " Wh" );
System.in.read(); // de IO console blijft even staan
}
}
|
Stap1: constante waarde
In java wordt een constante waarde aangegeven met static
final gevolgd door het gegevenstype en de naam
static final int NM_PER_WH = 3600;
Stap2: declareren
In de methode main worden eerst twee gebroken getallen newtonMeters
en wattuur als double gedeclareerd.
Stap3: afdrukken van het doel en de vraag
Vervolgens wordt met de functie println het doel van het
programma op het console afgedrukt. println eindigt
automatisch met een newline karakter, die er meteen voor zorgt
dat de tekst naar het scherm wordt gestuurd.
De functie print drukt de vraag af (zonder newline).
Hier ontbreekt het automatisme van println. De methode flush
zorgt ervoor dat de tekst op het scherm verschijnt.
Stap4: inlezen van een getal
In de onderstaande programmacode wordt een double ingelezen vanaf
het toetsenbord. Kon het niet simpeler; java was toch eenvoudiger
dan C++.
DataInputStream cin = new DataInputStream(System.in);
String buffer;
try {
buffer = cin.readLine();
} catch (java.io.IOException e) {
buffer = "0.0";
}
Het toetsenbord - System.in - wordt gekoppeld aan een DataInputStream. De klasse DataInputStream heeft een methode readLine, die een reeks karakters inleest vanaf het toetsenbord en wordt afgesloten met een newline (de Enter-toets).
Omdat er bij het inlezen van alles mis kan gaan; moet de exception opgevangen worden in een try .. catch blok. Gaat het mis dan maken we de ingelezen String tot "0.0".
Het kan eenvoudiger door de IOException het bos in te sturen door achter de methode main throws IOException te zetten. Alle IO fouten wordt nu doorgestuurd naar main, die ze verder doorstuurd. Maar ze worden nergens afgehandeld. In andere voorbeelden zullen we deze manier gebruiken.
Stap5: conversie van een String naar een double
De string die nu binnen is moet geconverteerd worden naar een
double. We gebruiken hier:
newtonMeters = Double.valueOf(buffer).doubleValue();
Hier wordt deNumberFormatException opgevangen en de ingelezen waarde op 0.0 gezet als de conversie mis gaat.
"life ain't easy, but it's safe"
Conclusie inlezen van gegevens is altijd een gedoe. Neem je
nu een Applet dan moeten allerlei invoervelden gemaakt worden en
kies je voor de console IO dan zijn er allerlei exceptions en
conversie, die het ingewikkeld maken.