Rekenen met hele getallen

Getallen en rekenen

Dit programma berekent de oppervlakte van een rechthoek uit de gegeven lengte en breedte

De applet

Programmacode

// Dit programma rekent het oppervlak uit van een ingevoerde lengte en breedte 
// Oppervlak.java
import java.awt.*;	
import java.awt.event.*;
import java.applet.Applet;

public class Oppervlak extends Applet implements ActionListener {
    int lengte, breedte; 				
    int oppervlak; 								
    Label vraagLengte, vraagBreedte; 
    TextField invoerLengte, invoerBreedte; 

	// Plaats de componenten 
    public void init() {
	// Stap1 creatie van de componenten
	vraagLengte = new Label( "Geef de lengte: " );
	vraagBreedte = new Label( "Geef de breedte: " );
	invoerLengte = new TextField( 10 ); 
	invoerBreedte = new TextField( 10 ); 
	// Stap2: aanmelden bij de layoutmanager
	add( vraagLengte ); 						
	add( invoerLengte );						
	add( vraagBreedte); 						
	add( invoerBreedte );	
	// Stap3: als breedte is ingevoerd wordt een event gegenereerd					
	invoerBreedte.addActionListener(this); 
    }

	// Verwerk de invoer in het invoervelden
    public void actionPerformed( ActionEvent e) {
	// Stap4 en 5: lezen en converteren
	lengte  = Integer.parseInt( invoerLengte.getText() );
	breedte = Integer.parseInt( invoerBreedte.getText() );
	// Stap6 aanroepen van de paint methode
	repaint();
    }

    public void paint(Graphics g) {
	// Stap7: de vermenigvuldiging
	oppervlak = lengte * breedte;
	// Stap8: het afdrukken van het resultaat
	g.drawString ("De oppervlakte is: " + oppervlak, 60, 80);
    }
}    

Analyse

de deeltaken
Een korte analyse leert ons dat we de uit te voeren taak kunnen verdelen in drie deeltaken.

  1. vraag en lees de afmetingen van de rechthoek
  2. bereken het oppervlak = lengte x breedte
  3. druk de berekende waarde af

Deeltaak 1 kunnen we nog verder opdelen (we noemen dat 'verfijnen') in de deeltaken. Er ontstaan dan de volgende programmastappen:

  1. initialisatie
    1. Stap1: Creëer de vraag en de invoervelden
    2. Stap2: Meld de componenten aan bij de layout manager
    3. Stap3: Verbind de ActionListener
  2. handel het event af
    1. Stap4: Lees de lengte en breedte
    2. Stap5: Converteer de lengte en breedte
    3. Stap6: roep de paint methode aan
  3. bereken
    1. Stap7: Bereken het oppervlak = lengte x breedte
    2. Stap8: Druk de berekende waarde af

Ontwerp

De init methode

stap1 In de init methode wordt geheugen gealloceerd voor de componenten Label en TextField.

stap2: Met add worden deze componenten toegevoegd aan de Layoutmanager.

stap3: Alleen het invoerveld van de breedte wordt verbonden met de ActionListener, zodat pas na het invoeren van de breedte het oppervlak berekend wordt.

De actionPerformed methode

stap4: Hier worden de TextField's uitgelezen met getText.

stap5: De verkregen Strings worden geconverteerd naar integers. Hier kan op een vreemde manier iets mis gaan. Als bij één van de textFields geen getal wordt ingevoerd, maar niets of een willekeurige tekst. Dan wordt er een NumberFormatException geworpen. Dit heeft als gevolg dat het programma uit zijn huidige verloop springt naar een exception handler. Omdat deze niet voorhanden is wordt alleen de huidige methode verlaten zonder dat de verder instructies worden uitgevoerd. Dus in dit geval wordt repaint niet uitgevoerd.

stap6: De repaint methode roept de paint methode aan opdat het berekende oppervlak op het scherm wordt afgedrukt.

De paint methode

stap7: In de paint methode wordt de oppervlak berekent. oppervlak = lengte * breedte;

stap8: In drawString zien we hoe twee tekststring worden samengevoegd met het + teken. De integer oppervlak wordt impliciet geconverteerd naar een String door het + teken, die hier twee Strings samenvoegt.

De variabele oppervlak hadden we niet nodig gehad als de vermenigvuldiging van lengte en breedte als expressie in de drawString methode had gestaan.

g.drawString ("De oppervlakte is: " + lengte * breedte, 60, 80);

Er zijn hier geen haakjes nodig omdat het sterretje een hoger prioriteit dan het + teken heeft.

Hint: Een mogelijke fout
Als er had gestaan een plusteken + voor een optelling in plaats van een sterretje. * voor een vermenigvuldiging

g.drawString ("De oppervlakte is: " + lengte + breedte, 60, 80);

Dan had het resultaat geen optellen gegeven, maar het plus-teken had de drie strings achter elkaar geschreven. Bijvoorbeeld was de lengte 3 en de breedte 4, dan was het afgedrukte resultaat: De oppervlakte is: 34

Dit is te voorkomen door haakjes rondom de echte optelling te zetten

g.drawString ("De oppervlakte is: " + (lengte + breedte), 60, 80);
copyright ® Little World 1998