Inlezen van een gebroken getal

Getallen en rekenen

Dit programma maakt gebruik van de prompt en de methode readLine en de conversie naar een double.

Uitvoer (application)

Conversie van een ingetypte energie in Nm naar Wh 
Geef de energie in Nm: 3000
Dat is 0.833333 Wh

Programmacode

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
  }
}

Uitleg

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.

copyrights ® Little World 1998