Hoofdstuk 4 Java

Hoofdstuk 4 Java

Meestgestelde vragen

Aan de linkerkant vind je de categorieën voor de vragen.

Java-Editor

1. Hoe maak ik een nieuw applet aan?

Een nieuwe applet maak je op de volgende manier aan:

  1. Ga naar het menu-item Bestand.
  2. Kies dan voor Nieuw.
  3. Kies tenslotte voor Frame (of JFrame).


Let op: de optie Applet en JApplet werken niet meer!

 

2. Waar kan ik het tabblad AWT vinden?

Het tabblad AWT wordt standaard niet in het programma Java-Editor weergegeven. Bij de opdrachten heb je dit tabblad echter wel nodig. Volg onderstaande stappen om het tabblad te zien te krijgen.

  1. Ga naar Venster -> Configuratie.
  2. Klik aan de linkerkant op Zichtbaarheid.
  3. Vink het tabblad AWT aan en klik op Opslaan.

 

3. Waar kan ik de GUI-designer vinden?

De GUI-designer kan je tonen door op dit    icoontje te klikken. Dit icoontje vind je links in de verticale balk.

 

4. Waar kan ik de object-inspecteur vinden?

De object-inspecteur kan je vinden aan de rechterkant van het scherm. In de object-inspecteur kan je alle informatie over een widget vinden. Bijvoorbeeld de positie, de grootte en de naam van de widget.

Ben je de object-inspecteur kwijt dan kan je hem weer tonen door op dit    icoontje in de menubalk te klikken.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

5. Wat wordt er bedoeld met een widget?

Een widget is een onderdeel van de interface (de 'buitenkant') van een applicatie. Voorbeelden van widgets zijn: een knop, een invoerveld, een menubalk of een checkbox.

 

6. Wat wordt er bedoeld met een widget toolkit?

Een verzameling van widgets wordt een widget toolkit genoemd. In Java bestaan er twee widgets toolkits: AWT en Swing. AWT (Abstract Window Toolkit) is de oorspronkelijke widget toolkit en Swing is de opvolger daarvan.

 

7. Wat wordt er bedoeld met de afkorting GUI?

De afkorting GUI staat voor Graphical User Interface en hiermee wordt de buitenkant van een applicatie bedoeld. Met de GUI-designer (zie vraag 2) ontwerp je steeds de buitenkant van de applicatie/applet.

Java

1. Lees je programmacode van links naar rechts of van rechts naar links?

Programmacode lees je altijd van rechts naar links. Dit geldt voor alle programmeertalen.

links <------ rechts
int x = y + z

 

 

Met andere woorden: het gedeelte aan de rechterkant van het gelijkteken (=) wordt eerst uitgevoerd en de uitkomst daarvan wordt toegewezen aan de linkerkant ervan.

 

2. Hoe moet elke regel code eindigen?

Elke regel code moet in Java eindigen met een puntkomma ( ; ).

 

3. Wat wordt er bedoeld met een event-handler?

De event-handler is de blok code die wordt uitgevoerd zodra je op een knop in de interface klikt. De event-handler kan je herkennen doordat in de naam het woord ActionPerformed staat.

 

1  public void knop_ActionPerformed(ActionEvent evt) {
2      // TODO add your code here
3   
4  }

De event-handler begint op regel 1 en eindigt in op regel 4. Jouw code moet je steeds tussen de begin-accolade ( { ) en de eind-accolade ( } ) neerzetten (op de plek waar 'add your code here' staat).

 

Let op: ergens bovenaan in de code van elke applet staan ook de volgende regels:

knop.addActionListener(new ActionListener() {
   public void actionPerformed(ActionEvent evt) {
      knop_ActionPerformed(evt);
   }
});

Ondanks dat in deze regels het woord ActionPerformed staat, is dit niet de locatie waar je jouw code moet schrijven. Scroll dus even verder totdat je ergens in de code 'add your code here' ziet staan.

 

4. Wat betekent de foutmelding 'cannot find symbol'?

De error 'cannot find symbol' betekent dat de naam van een variabele (of methode) niet wordt herkend. Controleer de spelling van de variabele (of de methode).

Let op: Java is hoofdletter gevoelig dus controleer ook de hoofdletters!

 

5. Hoe kan ik het schrijven van een Java-applet het beste aanpakken?

Het schrijven van een Java-applet kan je het beste aanpakken door het doorlopen van de volgende stappen:

  1. Maak een nieuwe Java-applet
  2. Bouw de GUI m.b.v. het designformulier.
  3. Schrijf in het Nederlands hoe de code moet functioneren.
  4. Vertaal de stappen uit punt 3 naar Java-code.
  5. Lees de code door en controleer deze op logica- en spelfouten.
  6. Voer de applet uit en kijk of er geen foutmeldingen worden getoond.

 

6. Hoe moet ik een foutmelding lezen?


Voorbeeld:

HelloWorld.java : 56 : 10 : error : cannot find symbol

 

HelloWorld.java       bestandsnaam
56   regelnummer
10   karakternummer
error   type fout/melding
cannot find symbol   omschrijving van de fout/bug

 

In het bovenstaande voorbeeld zit er een spelfout in de buurt van het 10de karakter op de 56ste regel in het bestand HelloWord.java.

 

Tip: door te dubbelklikken op de foutmelding, ga je direct naar de regel waar de fout/bug staat!

 

7. Hoe kan ik aantekeningen bij een stuk code plaatsen?

Je kan aantekeningen bij een stuk code te plaatsen door deze achter twee schuine strepen te plaatsen.

 

Voorbeeld

// Deze tekst wordt niet gecompileerd.
// Erg handig om uit te leggen hoe de code werkt!

 

Een andere manier om aantekeningen bij een blok code te plaatsen is door de aantekening te plaatsen tussen de code /* en */.

 

Voorbeeld

/*
 *  1. Haal het getal op uit het invoerveld.
 *  2. Vermenigvuldig het getal met x
 *  3. Plaat de uitkomst in het uitvoerveld.
 */

 

Windows 10

1. Hoe kan ik de bestandsnaamextensies in Windows Verkenner tonen?

Wanneer je in de map van een applet kijkt dan zal je zien dat daar meerdere bestanden in staan. Hoe weet je nou welk van die bestanden jouw programmacode bevat? Normaal gesproken kan je dat zien aan de bestandsnaamextensie .java maar die wordt helaas door Windows Verkenners niet getoond :-(.

Gelukkig kan je deze functionaliteit wel makkelijk aanzetten:
Klik in Windows Verkenner op het tabblad Beeld en zet vervolgens een vinkje bij Bestandsnaamextensie. Als je dat hebt gedaan, zie je de bestandsnaamextensies. Het bestand dat eindigt op .java is het bestand dat jouw code bevat!

Terminologie

1. Wat wordt er bedoeld met het declareren van een variabele?

Met het declareren van een variabele wordt het aanmaken van een nieuwe (lege) variabele bedoeld.

 

2. Wat wordt er bedoeld met een toekenning?

Met een toekenning wordt het toekennen van een waarde (een getal of tekst) aan een variabele bedoeld. Een toekenning gebeurt altijd met behulp van het gelijkteken ( = ). Met andere woorden: overal waar een gelijkteken staat, is er sprake van een toekenning!

 

3. Wat wordt er bedoeld met het initialiseren van een variabele?

Met het initialiseren van een variabele wordt het voor de eerste keer toekennen van een waarde aan de variabele bedoeld.


4. Wat wordt er bedoeld met een expressie?

Met expressie wordt de code bedoeld die aan de rechterkant van het gelijkteken staat. Met andere woorden: dat wat je toekent aan een variabele. De term expressie wordt in de praktijk nauwelijks gebruikt.

 

Meer informatie over declareren, initaliseren, toekenning en expressie kan je vinden op slide 12 t/m 29 van de presentatie Programmeren met Java.

 

Leestekens

{   beginaccolade
}   eindaccolade
;   puntkomma
(   beginhaakje
)   eindhaakje

 

 

 

 

 

 

1. Inleiding

Java

In deze module maak je kennis met de programmeertaal Java. De taal Java is ontwikkeld door James Gosling. De naam Java is pas later bedacht. Gosling noemde zijn nieuwe programmeertaal aanvankelijk “Oak”. Vanuit zijn kantoor keek Gosling namelijk door het raam uit op een eikenboom. De naam Oak werd jaren later door Sun, het bedrijf waar Gosling voor werkte, veranderd in Java. Dit omdat de naam Oak al was geregistreerd door een ander bedrijf: Oak Technologies. In 2010 is het bedrijf Sun overgenomen door de multinational Oracle.

 

Computerprogramma

Computerprogramma’s worden geschreven door programmeurs. Een computerprogramma bestaat uit een reeks instructies die door de computer worden uitgevoerd. De programmacode die wordt geschreven, heet de broncode. Deze broncode kan niet rechtstreeks door een computer worden verwerkt. De broncode moet altijd eerst worden omgezet naar machinecode (vergelijkbaar met binaire code). Daarna kan het programma pas worden uitgevoerd. Het proces van het omzetten van broncode naar uitvoerbare code verloopt, afhankelijk van de gebruikte programmeeromgeving, niet altijd op dezelfde manier.

In Java wordt de broncode van het programma geschreven in een voor mensen leesbare, 'platte' tekst. Met platte tekst bedoelen we tekst zonder codes voor opmaak van de tekst. De broncode wordt opgeslagen in een bestand met de bestandsnaamextensie .java. Daarna moet dit bestand worden omgezet naar een formaat dat door de computer kan worden verwerkt. Daarvoor wordt een apart programma, de compiler, gebruikt. Een compiler zet broncode om naar machinetaal (een soort binaire code) zodat deze uitgevoerd kan worden. In Java levert het compileren van de broncode een .class bestand op. Dit bestand bevat Java bytecode.

Deze bytecode is echter geen volwaardige machinecode en kan dan ook niet rechtstreeks worden uitgevoerd. Het is een soort tussenvorm. De code is, in tegenstelling tot machinecode, processoronafhankelijk. Er is een speciaal geschreven programma nodig om de bytecode op een bepaald platform uit te voeren. Dat programma heet de Java Virtual Machine.

 

 

 

Leerdoelen

 

Na verwerking van deze module:

  • Kan je uitleggen wat een computerprogramma is.
  • Kan je uitleggen wat de functie van een compiler is.
  • Kan je de verschillende type variabelen herkennen en gebruiken.
  • Kan je uitleggen wat er wordt bedoeld met de declaratie van een variabele.
  • Kan je uitleggen wat er wordt bedoeld met de initialisatie van een variabele.
  • Kan je uitleggen wat er wordt bedoeld met een assignment.
  • Kan je een if-else (en een switch statement) schrijven.
  • Kan je een for-loop (en een while-loop) schrijven.
  • Kan je een aantal methoden van Java gebruiken.
  • Kan je zelf een methode schrijven.

2. Java-Editor

Teksteditors

Voor het programmeren van een computerprogramma heb je niets meer nodig dan een eenvoudige teksteditor (bijvoorbeeld Notepad++). Om het programma uit te voeren heb je dan nog wel een compiler en een interpreter nodig.

Met de compiler wordt het programma bedoeld dat jouw programmacode omzet naar bytecode en met interpreter wordt het programma bedoeld dat de bytecode  omzet naar machinecode (een soort binaire code). De machinecode wordt vervolgens door jouw computer uitgevoerd.

Moderne programma's hebben een uitgebreide user interface met menu's, knoppen, invulvelden en animaties. Voor het schrijven van een simpele user interface moet er veel programmacode worden getypt: veel en niet zo interessant werk.

Daarom zijn er zogenaamde geïntegreerde ontwikkelomgevingen (in het Engels: Integrated Development Environment, IDE) op de markt gebracht. Deze IDE’s verlichten het werk van de programmeur. De code voor het schrijven van de user interface wordt door de IDE voor de programmeur gegenereerd en hoeft dus niet telkens zelf te worden geschreven. Bij dit hoofdstuk gaan we gebruik maken van de IDE Java-editor.

Java-Editor

Wanneer je Java-Editor opstart, krijg je het volgende scherm te zien:

 


Het programmavenster van JavaEditor bestaat uit de volgende onderdelen:

  • Een menubalk
  • Een knoppenbalk (onder de menubalk)
  • De 'object-inspecteur'

 

De 'object-inspecteur' geeft een overzicht van de eigenschappen en de waarden van een 'widget'. Een widget is een onderdeel van een user interface. Voorbeelden van widgets zijn: knoppen, invoervelden, tabbladen en drop-down menu's.


Het venster van de object-inspecteur kan je tonen en verbergen door in de menubalk op Venster te klikken en vervolgens op Object-inspecteur aan/uit.

 

 

Overzicht van alle onderdelen van Java-Editor

 

 

Opdracht 2.1 - EersteApplet

Open Java-Editor en maak een nieuwe applet aan:

  1. Bestand → Nieuw → Frame.
  2. Maak een nieuwe map aan (geel icoontje) en en noem die EersteApplet.
  3. Plaats in deze map de applet en geef deze de naam EersteApplet (dezelfde naam als de map dus).

 

We gaan een programma schrijven waarvan de interface bestaat uit één knop en twee tekstvelden. In het eerste tekstveld voert de gebruiker zijn naam in en zodra hij op de knop Verplaats drukt, wordt zijn naam verplaatst naar het tekstveld er onder.

 

We beginnen met het maken van de user interface. We maken daarbij gebruik van het hulpmiddel dat Java-Editor ons biedt: het designformulier.

 

A.
In het designformulier moeten twee tekstvelden worden geplaatst: één voor de invoer en één voor de uitvoer. In het tabblad AWT van Java-Editor is daar een aparte knop voor met de naam TextField.

 

 

B.
Plaats een tekstveld in het designformulier door een rechthoek te trekken.

C.
Plaats het tweede tekstveld op dezelfde manier.

D.
Vervolgens plaatsen we een knop in het designformulier. Klik daarvoor op de knop Button in de knoppenbalk en plaats de knop in het designformulier.



Dan verschijnt het volgende scherm:

Selecteer de knop door er op te klikken. In de Object-inspecteur verschijnen de eigenschappen van de knop. Daarin wordt o.a. de grootte van de knop, de tekst op de knop (label) en de naam van de knop (name) getoond. 

Wijzig de tekst op de knop in Verplaats.

 

F.
De naam die Java-Editor aan de knop heeft gegeven is button1. Wanneer we meerdere knoppen in de applet plaatsen, is aan de naam niet goed te zien welke knop bedoeld wordt. Daarom moet ieder knop/widget van een betekenisvolle naam worden voorzien.


Wijzig de naam van de knop in verplaatsknop.


G.
Wijzig op dezelfde manier de naam van het bovenste tekstveld in invoerveld en het onderste tekstveld in uitvoerveld. Verwijder de tekst die staat bij het vak Text.

 

H.

Het ontwerp van de user interface is klaar! De applet kan proefdraaien!



Kies, om het applet te testen: Start → Starten applicatie.

Typ in het invoerveld je naam en klik op de knop.


In het uitvoerveld verschijnt er niets :-(. We hebben wel keurig de velden en de knop in de interface geplaatst, maar niet aangegeven wat de applet moet doen als er op de knop wordt gedrukt.

Het klikken op de knop noemen we een event (een gebeurtenis). De gebruiker wil het programma iets laten doen. Daarvoor moet er een stukje programmacode worden geschreven, dat de event (de gebeurtenis) afhandelt. Het stukje code dat een event afhandelt, noemen we de event-handler.

I.
Om de applet te laten reageren op de knop, moet er programmacode worden geschreven. Daarvoor kunnen we gebruik maken van de editor in Java-Editor.

 


Als je het venster open, zie je dat er al code staat. Deze code heeft Java-Editor gemaakt op het moment dat je een tekstveld of een knop op het designformulier plaatste.

Om de verplaatsknop iets te laten doen moeten we aan de event-handler van de knop, code toevoegen. De code moet de tekst uit het invoerveld halen en in het uitvoerveld plaatsen. Daarna moet het invoerveld worden leeggemaakt.

 

Onder aan de code staat de event-handler van de verplaatsknop. De event-handler kan je herkennen doordat de naam ervan eindigt met ActionPerformed.

public void verplaatsknopActionPerformed (ActionEvent evt) {

  // Plaats altijd hier de code!!

} 
1    // De tekst in het invoerveld wordt verplaatst naar het uitvoerveld.
2    
3    String naam;
4    naam = invoerveld.getText();
5
6    uitvoerveld.setText(naam);
7    invoerveld.setText("");

 

J.
Wat betekent bovenstaande code?

  1. De eerste regel is commentaar. Commentaar is bedoeld om de code beter leesbaar te maken voor de programmeur. In Java kun je commentaar toevoegen door tekst achter twee schuine strepen // te plaatsen of tussen /* en */ te zetten.
  2. In de derde regel wordt de variabele naam gecreëerd van het type String. In deze variabele kan tekst worden opgeslagen. In onderdeel 3 wordt uitlegd wat er met variabelen wordt bedoeld.
  3. In de vierde regel wordt de inhoud van het invoerveld met behulp van de actie getText() opgeslagen in de variabele naam.
  4. In regel zes wordt de inhoud van de variabele naam met behulp van de actie setText() in het uitvoerveld geplaatst.
  5. In de laatste regel wordt het invoerveld leeg gemaakt.


K.
Test het applet en kijk of deze goed werkt.

Opdracht 2.2 - NAW-applet

De opdracht is een applet te maken, waar de gebruiker achtereenvolgens zijn naam (N), adres (A) en woonplaats (W) in aparte tekstvelden invoert. Om duidelijk te maken wat er moet worden ingevoerd, staan er labels bij de invoervelden (links).

 

 

 

 

 

 

 

 

 

In elk tekstveld kan slechts één regel tekst worden geplaatst. Door de gebruiker te laten klikken op de OK-knop, moet de tekst uit de 3 invoervelden worden gehaald en in het veld eronder worden geplaatst. Dit onderste veld moet van het type TextArea zijn. Dit omdat alleen een TextArea meerdere regels kan tonen.

 

De TextArea widget kan je hier vinden:

 

Doorloop de volgende stappen:

  1. Maak een nieuw applet (Bestand → Nieuw → Frame.) en sla deze op onder de naam NAW-applet.
  2. Plaats drie keer een TextField op de GUI-designer en geef deze widgets de volgende namen: naamveld, adresveld en woonplaatsveld.
  3. Plaats een knop (Button) met daarop de tekst OK en noem deze widget OKknop.
  4. Plaats links naast de drie tekstvelden drie labels (Label).
    1. Wijzig de tekst van de 1ste label in: 'Type je naam in: '
    2. Pas op dezelfde manier, de andere twee labels aan.
  5. Maak een TextArea voor het tonen van alle ingevoerde tekst en geef deze TextArea de naam uitvoerveld.
  6. Om de applet te laten reageren op de verzendknop moet er code aan de knop worden gekoppeld. Dit doe je door de code te plaatsen in de event-handler die bij de knop hoort. De event-handler kan je altijd in de code herkennen doordat deze eindigt met de naam ActionPerformed.

 

Neem onderstaande code over en plaats deze in de event-handler van de knop OKknop. Let bij het overnemen op het gebruik van hoofdletters en leestekens!

Tip: typ de code regel voor regel over zodat je stilstaat bij wat er staat! Kopieer je de code dan weet je niet wat je hebt gekopieerd en hoe de code functioneert! Het typen kost meer tijd maar je leert er meer van!

 

1    public void OKknopActionPerformed (ActionEvent evt) {
2    
3       String naam;
4       naam = naamveld.getText();
5    
6       String adres;
7       adres = adresveld.getText();
8    
9       String woonplaats;
10      woonplaats = woonplaatsveld.getText();
11    
12      String uitvoer;
13      uitvoer = naam + "\n" + adres + "\n" + woonplaats;
14    
15      uitvoerveld.setText(uitvoer);
16    
17      naamveld.setText("");
18      adresveld.setText("");
19      woonplaatsveld.setText("");
20    
21    }

 

In regel 8 staat: "\n".  De 'n' in deze code staat voor het woord newline en hiermee wordt bedoeld dat de tekst die hierna komt op een nieuwe regel moet worden geplaatst. Het heeft dus dezelfde functie als een 'enter' bij een tekstverwerkingsprogramma.

Met het plusteken (+) worden twee stukken tekst steeds samengevoegd.

 

Test tenslotte of het programma goed werkt!

Opdracht 2.3 - Vragen

In de vorige opdracht hebben we code voor de event-handler van de OKknop geschreven (NAW-Applet). Laten we deze code gaan analyseren!

 

Beantwoord daartoe de volgende vragen:

  1. Wat gebeurt er in de regel String naam; ?
  2. Wat doet de methode getText() in de regel naam = naamveld.getText(); ?
  3. Waarom moet je een widget van de klasse TextArea gebruiken in plaats van de klasse TextField?
  4. In regel 13 staat  uitvoer = naam + "\n" + adres + "\n" + woonplaats;
    Leg uit wat de code in regel 8 doet.
  5. Wat gebeurt er in de regel uitvoerveld.setText(uitvoer); ?

3. Variabelen

Declareren

Een variabele een woord binnen de programmacode die steeds een andere waarde kan bevatten.

Zo'n variabele is altijd van een bepaald type. Je kunt niet zomaar iedere waarde toekennen aan een variabele. Er zijn variabelen die tekst bevatten maar er zijn ook variabelen die alleen getallen kunnen bevatten. Het aanmaken van een variabele wordt het declareren van een variabele genoemd. Het declareren/aanmaken van een variabele bestaat uit het vastleggen van het datatype en uit het vastleggen van de naam van de variabele.
 

Kijk eens naar het volgende voorbeeld:

1    String naam;
2    naam = invoerveld.getText();

 

In de eerste regel is in de declaratie vastgelegd dat de variabele een bepaalde naam heeft en van een bepaald type is (String). De naam van een variabele kan in principe vrij worden gekozen. In Java bestaan een klein aantal basistypen, bijvoorbeeld int voor gehele getallen, double voor decimale getallen en boolean voor de logische waarde true of false.
Op regel 2 wordt aan de variabele naam een tekst toegekend. De variabele naam is van het type String (op regel 1). Een waarde van het type String kan alleen tekst bevatten.

Voorbeelden van declaraties zijn:

String naam;
int cijfer;
double bedrag;
boolean ok;


Nadat een variabele is gedeclareerd (er is aangegeven van welk datatype de variabele is én wat de naam van de variabele is) kan er ook een beginwaarde aan een variabele worden toegekend. We noemen dit het initialiseren van een variabele. De initialisatie kan gelijktijdig met het declareren van een variabele plaatsvinden of op een later moment in de code.
 

Voorbeelden van initialisaties zijn:

String naam = “Jansen”;
int cijfer = 5;
double bedrag = 12.35;
boolean ok = true;

Datatypen

Wanneer je een variabele aanmaakt, moet je aangeven wat voor een soort data je in de variabele kan opslaan. Dat doe je door voor de naam van de variabele het datatype te vermelden.

 

De meest gebruikte datatype zijn:

int   Voor het opslaan van hele getallen.
double   Voor het opslaan van decimale getallen.
String   Voor het opslaan van tekst.
boolean   Voor het opslaan van de waarden true of false.

 

Voorbeelden van het gebruik van deze datatypen zijn:

int getal = 5;
double pi = 3.14;
String merk = "Lamborghini";
boolean ingelogd = false;

 

 

Opmerkingen:

  • Met het datatype int kan je alleen hele getallen opslaan.
  • Met het datatype double kan je zowel hele als decimale getallen opslaan.
  • Voor het scheiden van het decimale cijfer van het 'gewone' cijfer gebruik je een punt (en dus geen komma zoals in Nederland gebruikelijk is).
  • Wanneer je tekst toekent aan een variabele dan moet deze tekst tussen dubbele aanhalingstekens staan.
  • Het datatype boolean kent maar twee waarden: true of false. Plaats om deze twee waarden geen dubbele aanhalingstekens want dan maak er een String (tekst) van!

 

Herkomst van de namen

  • 'int' is de afkorting van het woord integer. Integer is het Engelse woord voor 'heel getal'. 'int' betekent dus 'heel getal'.
  • String is het Engelse woord voor tekenreeks. Met tekenreeks wordt een 'aaneenrijging' van letters bedoeld.
  • Met double wordt bedoeld dat er twee keer zoveel bits beschikbaar zijn voor het opslaan van het getal dan bij int (Bij int zijn er 32 bits beschikbaar en bij double zijn er 64 bits beschikbaar.)
  • Het datatype boolean is genoemd naar de wiskundige George Boole. Hij is de 'uitvinder' van de Booleaanse algebra. Met Booleaanse algebra wordt de wiskunde bedoeld waarbij er logisch wordt geredeneerd aan de hand van de waarden true en false in combinatie met de operatoren AND, OR en NOT.

 

Int versus double

Misschien vraag je je af waarom je niet altijd een double zou gebruiken als deze zowel hele getallen als decimale getallen kan bevatten. De reden is dat voor het aanmaken van één variabele van het datatype double, 64 bits worden gereserveerd in het interne geheugen en voor het aanmaken van één variabele van het datatype int maar 32 bits. Het gebruik van een int is dus efficiënter.

 

Officiële documentatie

De officiële informatie van alle 'primitieve datatypen' van Java kan je hier vinden:
https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html

Toekenningen

In de eerste applet die je hebt gemaakt, staat de volgende code:

1    String naam;
2    naam = invoerveld.getText();

 

Bekijk deze code eens. De tweede regel is een voorbeeld van een toekenning (in het Engels assignment). Aan de rechterkant van het gelijkteken (=) staat de expressie. De expressie is de waarde die wordt toegekend aan de variabele die aan de linkerkant staat.

 

Een toekenning heeft altijd de volgende vorm:

variabelnaam = expressie;

 

In regel twee is de expressie: invoerveld.getText(). De waarde van deze expressie is de tekst die we hebben ingetypt in het tekstveld invoerveld. Deze waarde wordt toegekend aan de variabele naam.

De term expressie wordt in de praktijk weinig gebruikt.

 

Opdracht 3.1 - int

Doel
Het doel van deze opdracht is om te leren werken met variabelen van het datatype int.

 

Doorloop de volgende stappen:

1. Maak een nieuwe applet met daarop één knop.

 

 

 

 

 

 

 

 

 

2. Ga naar de event-handler van deze knop toe.

 

3. Declareer een nieuwe variabele met de naam getal1 en van het datatype int.

  • Met het declareren van een nieuwe variabele wordt het aanmaken van een nieuwe variabele bedoeld.
  • Met het datatype wordt het type data bedoeld dat kan worden opgeslagen in de variabele.

 

4. Initialiseer de variabele met de waarde 8.

  • Met het initialiseren van een variabele wordt het voor de eerste keer toekennen van een waarde aan de variabele bedoeld. Het toekennen van een waarde aan een variabele gebeurt altijd met het gelijkteken (=). De variabele staat altijd links van het gelijkteken en de waarde die je eraan toe wil kennen altijd rechts.

 

5. Declareer een tweede variabele. Deze variabele moet de naam getal2 hebben en moet ook van het datatype int zijn.

 

6. Initialisser de variabele getal2 met de waarde 5.

 

7. Declareer een derde variabele. Deze variabele moet de naam totaal hebben en moet ook van het datatype int zijn.

 

8. Schrijf de regel code die ervoor zorgt dat de twee variabele bij elkaar worden opgeteld en waarbij de uitkomst wordt toegekend aan de variabele totaal. Voor het optellen van de twee variabele kan je dezelfde operator gebruiken als die je in de wiskunde gebruikt (zie onderdeel 4. Operatoren).

 

9. Toon de uitkomst van de optelsom in de terminal van Java-Editor.


De uitkomst van de optelsom kan je in de terminal tonen door het schrijven van de volgende code:

System.out.println(totaal);

(Met de terminal wordt het onderste scherm in Java-Editor bedoeld.)

 

10. Lees alle code die je hebt geschreven nog één keer door en controleer of je niet ergens een spelfout hebt gemaakt. Controleer ook of er aan het einde van elke regel een puntkomma staat!

 

11. Compileer de code en voer deze uit.

De code wordt automatisch gecompileerd en uitgevoerd als je op groene 'Play'-knop () klikt.

 

12. Druk op de 'Click me!'-knop en kijk of in de terminal de uitkomst van de optelsom wordt getoond. Krijg je een foutmelding? Lees deze dan rustig door (zie Veelgestelde vragen → Java ).

 

Opdracht 3.2 - double

Doel
Het doel van deze opdracht is om te leren werken met variabelen van het datatype double.

 

Doorloop de volgende stappen:

 

1. Maak een nieuwe applet aan met daarop weer één knop

 

2. Ga naar de event-handler van deze knop toe.

 

Dan volgt nu de code die je moet schrijven!

 

3. Declareer een nieuwe variabele met de naam omtrek en van het datatype double.

4. Initialiseer de variabele met de waarde 355.0.

 

Vergeten wat er wordt bedoeld met de termen declareren en initialiseren?
Kijk dan bij: Veelgestelde vragen → Terminologie.

 

5. Declareer een tweede variabele. Deze variabele moet de naam diameter hebben en moet ook van het datatype double zijn.

6. Initialiseer de variabele met de waarde 113.0.

 

7. Declareer een derde variabele. Deze variabele moet de naam pi hebben en moet ook van het datatype double zijn.

 

8. Schrijf de regel code die de omtrek deelt door de diameter en de uitkomst hiervan  toekent aan de variabele pi.

Bij onderdeel 4.1 Operatoren kan je vinden welke operator je kan gebruiken voor het delen van twee waarden/variabelen.

 

9. Toon de uitkomst van de deling in de terminal van Java-Editor.

De waarde pi kan je in de terminal tonen door het schrijven van de volgende code:

System.out.println(pi);

 

10. Lees alle code die je hebt geschreven nog één keer door en controleer of je niet ergens een (spel-)fout hebt gemaakt. Controleer ook of er aan het einde van elke regel een puntkomma staat!

 

11. Compileer de code en voer deze uit.

De code wordt automatisch gecompileerd en uitgevoerd als je op groene 'Play'-knop () klikt.

 

12. Druk op de 'Click me!'-knop en kijk of in de terminal de waarde van pi (3.14) wordt getoond. Krijg je een foutmelding? Lees deze dan rustig door (zie Veelgestelde vragen → Java ).

 

Opdracht 3.3 - String

Doel
Het doel van deze opdracht is om te leren werken met variabelen van het datatype String.

 

Doorloop de volgende stappen:

 

1. Maak weer een nieuwe applet aan met daarop één knop

 

2. Ga naar de event-handler van deze knop toe.

 

Dan volgt nu de code die je moet schrijven!

 

3. Declareer een variabele met de naam voornaam en van het datatype String.

    Let op: String schrijf je altijd met de hoofdletter S (heeft een speciale reden1).

 

4. Initialiseer de variabele voornaam met de waarde Barack.

    Let op: tekst moet altijd tussen dubbele aanhalingstekens staan!

 

5. Declareer een tweede variabele. Deze variabele moet de naam spatie hebben en moet ook van het datatype String zijn.

6. Initialiseer deze variabele met de waarde  " ".

 

7. Declareer een derde variabele. Deze variabele moet de naam achternaam hebben en moet ook van het datatype String zijn.

8. Initialiseer deze variabele met de waarde Obama.

    Zie de waarschuwing bij stap 4.

 

9. Declareerd een vierde variabele. Deze variabele moet de naam president hebben en moet ook weer van het datatype String zijn.

 

10. Schrijf de regel code die de variabelen voornaam, spatie en achternaam samenvoegt en vervolgens toekent aan de variabele president.

Voor het samenvoeg van een of meerdere stukken tekst kan je de operator + gebruiken. Een voorbeeld van het gebruik van deze operator kan je vinden bij onderdeel 4. Operatoren →Tekst samenvoegen.

 

11. Toon de naam de ex-president van de Verenigde Staten in de terminal.
 

Dit kan je doen door het schrijven van de volgende regel code:

System.out.println(president);

 

12. Lees alle code die je hebt geschreven nog één keer door en controleer of je niet ergens een (spel-)fout hebt gemaakt. Controleer ook of er aan het einde van elke regel een puntkomma staat!

 

11. Compileer de code en voer deze uit.

 

12. Druk op de 'Click me!'-knop en kijk of in de terminal de naam van de ex-president van de Verenigde Staten wordt getoond. Krijg je een foutmelding? Lees deze dan rustig door (zie Veelgestelde vragen → Java ).

 

------------------------------

 

 

1. De reden dat je de S van String met een hoofdletter schrijft, is dat String een voorbeeld is van een 'referentiedatatype'. Met een referentiedatatype wordt een datatype bedoeld waarbij de werking ervan staat beschreven in een 'klasse'. Het gebruik van klassen is een onderdeel van een techniek die 'objectgeorienteerd programmeren' wordt genoemd. Wil je hier meer van weten? Stuur me dan een e-mailtje! Ik zal je dan mijn lesmateriaal hierover naar je toesturen.

 

Opdracht 3.4 - boolean

Doel
Het doel van deze opdracht is om te leren werken met variabelen van het datatype boolean.

 

Doorloop de volgende stappen:

 

1. Maak weer een nieuwe applet aan met daarop één knop

 

2. Ga naar de event-handler van deze knop toe.

 

Dan volgt nu de code die je moet schrijven!

 

3. Declareer een variabele met de naam stelling1 en van het datatype boolean.

Ondanks dat het datatype boolean de naam van een Wiskundige is, schrijf je dit datatype niet met een hoofdletter. Het datatype is namelijk een van de 'primitieve' datatypen van Java.

 

4. Initialiseer de variabele met de expressie 2 < 3.

 

5. Maak een tweede variabele aan. Deze variabele moet de naam stelling2 hebben en moet ook van het datatype boolean zijn.

6. Initialiseer deze variabele met de expressie 3 < 2;

 

7. Toon de uitkomst van beide expressies in de terminal.


Dit kan je doen door het schrijven van de volgende code:

System.out.println(stelling1);
System.out.println(stelling2);

 

8. Lees alle code die je hebt geschreven nog één keer door en controleer of je niet ergens een (spel-)fout hebt gemaakt. Controleer ook of er aan het einde van elke regel een puntkomma staat!

 

9. Compileer de code en voer deze uit.

 

12. Druk op de 'Click me!'-knop en kijk of in de terminal de uitkomsten van de twee expressie (true en false) worden getoond. Krijg je een foutmelding? Lees deze dan rustig door (zie Veelgestelde vragen → Java ).

 

Opdracht 3.5

Hieronder staat een deel van een Java-programma. In dit programma komen variabelen en toekenningen voor.
 

1   String naw = "Alan Turing" + "\n" + "ENIGMA-way" + "\n" + "Silicon Valley";
2   int teller;
3   teller = 1;
4   naw = nawveld.getText();
5   nawgebied.setText(naw);
6   int a;
7   int b;
8   a = 17;
9   b = 3;
10  goedeAntwoordveld.setText("a + b = 20");
11  a = b;
12  teller = b;

 

Opdracht
Noteer de declaraties van alle variabelen en noteer alle toekenningen.

 

Opdracht 3.6

Bekijk de volgende programmacode:
 

1  String naam;
2  naam = invoerveld.getText();
3  uitvoerveld.setText(naam);
4  invoerveld.setText("");

 

Opdrachten

  1.  Schrijf de regel op waarin een toekenning staat.
  2.  Wat is in die regel de variabelenaam?
  3.  Wat is in die regel de expressie?
  4.  Schrijf de regel op waarin een declaratie staat.
  5.  Van welk datatype is de variabele in deze declaratie?
  6.  Wat is de betekenis van ("") in de laatste regel?

 

4. Operatoren

Operatoren

Java kent de volgende rekenkundige operatoren:

Operator Betekenis
+ optellen
- aftrekken
* vermenigvuldigen
/ delen
% rest van een deling (vwo)      

 

Int

De operator / geeft bij een deling van twee getallen van het datatype int als resultaat een heel getal. Bijvoorbeeld:

15 gedeeld door 2 geeft als resultaat 7.    (!)


En dus niet 7.5 zoals je waarschijnlijk had verwacht. De uitkomst is 7 omdat alles wat na de punt komt simpelweg wordt 'weggegooid'.

 

Double

Bij een deling van twee waarden van het type double is het resultaat wel een decimaal getal. Bijvoorbeeld:

15.0 gedeeld door 2 geeft als resultaat 7.5. 

 

Modulo

De operator % (modulo) geeft de rest van een deling. Bijvoorbeeld:

15 module 2 (15 % 2) heeft als resultaat 1.

Meer informatie over modulorekenen kan je vinden op slide 65 van de presentatie Programmeren met Java.

 

 

Tekst samenvoegen

In Java kan je twee stukken tekst met elkaar samenvoegen m.b.v. het plusteken (+). Het samenvoegen van twee stukken tekst wordt String concatenation genoemd (zowel in Java als in andere programmertalen).

 

Voorbeeld

1   String voornaam   = "Alan";
2   String achternaam = "Turing";
3
4   String naam       = voornaam + " " + achternaam;
5
6   System.out.println(naam);

 

Op regel 4 wordt de voor- en achternaam samengevoegd. Tussen de voor- en achternaam wordt een spatie (" ") geplaatst.

 

Opdracht 4.1

I. havo
Geef het resultaat van de deling x gedeeld door y.

Opmerking: x en en y zijn hierbij steeds variabelen van het datatype int. Alleen bij opdracht b is x een double.

 

  1. x = 7  en  y = 3
  2. x = 3.5  en  y = 2
  3. x = 5  en  y = 0

 

II. vwo
Doe hetzelfde als hierboven maar bereken dan de rest van de deling met behulp van de modulo. Met andere woorden: bereken x % y.

 

(Het staat elke havo-leerling vrij om ook vwo-opdrachten te maken.)

Opdracht 4.2

Maak een applet met daarop één knop en voeg aan de event-handler daarvan de code toe die staat bij het onderdeel 'Tekst samenvoegen'.

Wordt de volledige naam (Alan Turing) in de terminal getoond?

5. Methoden

Methode-aanroep

Laten we nog eens naar de code kijken die je hebt geschreven bij opdracht 2.2 (de NAW-applet).
 

Code van de NAW-applet

1  public void OKknop_ActionPerformed(ActionEvent evt) {
2   
3      String naam; 
4      naam = naamveld.getText();
5
6      String adres;
7      adres = adresveld.getText();
8
9      String woonplaats;
10     woonplaats = woonplaatsveld.getText();
11
12   
13     String uitvoer; 
14     uitvoer = naam + "\n" + adres + "\n" + woonplaats;
15   
16     uitvoerveld.setText(uitvoer);
17
18     naamveld.setText("");
19     adresveld.setText("");
20     woonplaatsveld.setText("");
21   
22  }

 

Zoals je in de code kan zien, heeft de applet 4 tekstvelden: drie tekstvelden (naamveld, adresveld en woonplaatsveld) zijn van het type TextField en één tekstveld (uitvoerveld) is van het type TextArea.

 

Zo'n tekstveld is een voorbeeld van een widget (een widget is een element uit een grafische interface) en zoals je in de code kan zien, kan je met zo'n widget verschillende acties uitvoeren.

 

Met een tekstveld (TextField of TextArea) kan je bijvoorbeeld de volgende acties uitvoeren:

getText()
setText(uitvoer)

 

Zo'n actie die je met een widget kan uitvoeren wordt een methode genoemd.

 

Het uitvoeren van methode heeft altijd dezelfde opzet:

widget.methode(argument1, argument2).

 

Uitleg

  • Met widget wordt de naam van een widget bedoeld.
  • Met methode wordt de naam van de methode (actie) bedoeld.
  • Tussen haakjes staan geen, één of meerdere variabelen die je mee geeft aan de methode (gescheiden door een of meerdere komma's). Wanneert je een variabele meegeeft aan een methode dan wordt zo'n variabele een argument genoemd.

 

Returnwaarden

Wanneer je een actie op een widget uitvoert, heb je twee mogelijkheden:

  1. De actie wordt uitgevoerd en je krijgt niets terug.
  2. De actie wordt uitgevoerd en je krijgt er een variabele voor terug.

 

Als je na het uitvoeren van een actie geen variabele terugkrijgt dan wordt er gezegd dat de returnwaarde void is (void is het Engelse woord voor leeg of leegte).

Het kan echter ook zijn dat je na het uitvoeren van een methode wel een variabele terugkrijgt. In dat geval moet de variabele die je terugkrijgt van een bepaald datatype zijn. Het datatype van de variabele die je dan terugkrijgt, wordt de returnwaarde van een methode genoemd. De returnwaarde van een methode kan dus goed int, double, String of boolean zijn.

 

Voorbeeld van een methode zonder returnwaarde.

uitvoerveld.setText(uitvoer);

De methode setText heeft geen returnwaarde. Aangezien je geen variabele terugkrijgt, hoef je deze ook niet 'op te vangen' in een andere (nieuwe) variabele. De methode setText() heeft wel één argument (de variabele uitvoer).

 

Voorbeeld van een methode met returnwaarde.

naam = naamveld.getText();

De methode getText() heeft wel een returnwaarde. Van de methode krijg je namelijk de tekst terug die de gebruiker in het tekstveld naamveld heeft ingevoerd. Omdat je tekst terugkrijgt, is de returnwaarde van de methode String. De tekst die je van de methode terugkrijgt, moet je opvangen in een andere (nieuwe) variabele. In de bovenstaande code wordt de tekst die de gebruiker heeft ingevoerd, opgevangen in de variabele naam. De methode getText() heeft geen argumenten.

 

Ben je visueel ingesteld? Neem dan slide 40 t/m 42 van de presentatie Programmeren met Java door. Daar vind je afbeeldingen behorende bij de theorie.

 

6. Praktische opdrachten I

Opdracht 6.1 - FunBoring-applet

Doel
Het doel van deze opdracht is om zelf te bedenken welke code je moet schrijven om de applet goed te laten functioneren. De code bij deze opdracht is dus niet gegeven (zoals bij de eerdere opdrachten wel het geval was). De code van deze applet is wel erg kort: hij bestaat maar uit twee keer één regel code. Bij deze twee regels hoef je geen variabele aan te maken of te gebruiken.

 

Interface
De applet die je moet maken, moet er zo uitkomen te zien:

 

 

 

 

 

 

 

 

 

Werking
De applet moet als volgt functioneren: wanneer de gebruiker op de knop FUN klikt, moet er in het label de tekst “Java is fun!!” worden getoond en als de gebruiker op de knop BORING klikt, moet er “Java is boring!” worden getoond.

 

Bouw de interface van de applet

  • Plaats op de applet twee knoppen (widget: Button). Vermeld op deze twee knoppen de tekst Fun en Boring (de eigenschap Text in de object-inspecteur). De knoppen zelf kan je de namen funKnop en boringKnop geven (de eigenschap Name in de object-inspecteur).
  • Plaats op de applet een label (widget: Label). Vermeld in deze label de tekst 'Wat vind je van Java' (de eigenschap Text in de object-inspecteur). Geef het label zelf de naam meningLabel (de eigenschap Name in de object-inspecteur).

 

Code schrijven

  1. Schrijf in het Nederlands op hoe de code moet functioneren:
    1. Als er op de .... wordt geklikt, toon dan de tekst .... in het label.
    2. Als er op de .... wordt geklikt, toon dan de tekst .... in het label.
  2. Vertaal de twee regels bij stap 1 naar Java-code. Ga na welke actie van een label je hierbij kan gebruiken. Kies hierbij een actie die staat in het document 'Overzicht methoden'. Dit document kan je vinden bij onderdeel 17. Kies een actie die hoort bij de widget Label ('Klasse label').

 

Tips

  1. Deze applet heeft twee event-handlers! Plaats de juiste code in de juiste event-handler.
  2. De code van deze applet is zo kort dat deze maar uit twee keer één regel code bestaat. Bij deze twee regels hoef je geen variabele aan te maken of te gebruiken.
  3. Hoe je uitleg bij een stuk code kan plaatsen, staat uitgelegd bij vraag 7 van de veelgestelde vragen over Java.
  4. Kom je bij de lijst van acties, die staan in het document Overzicht methoden, de volgende code tegen: (String), vervang dan het woord String door de tekst waarvan je wilt dat die in het label moet verschijnen. Let op: deze tekst moet dan tussen dubbele aanhalingstekens staan!
  5. Het lettertype en de lettergrootte kan je aanpassen bij de eigenschap Font in de object-inspecteur.

 

 

Opdracht 6.2 - EuroDollar-applet

Doel

Het doel van deze opdracht is om te leren hoe je het maken van een applet het beste  kan aanpakken. De applet die je moet bouwen, moet een bedrag in euro’s kunnen omzetten naar dollars.

 

Interface

De buitenkant van de applicatie moet er zo uitkomen te zien:

 

 

 

 

 

 

 

 

 

Aanpak

Pak deze opdracht als volgt aan:

  1. Maak een nieuwe applet aan (frame).
  2. Bouw de interface van de applet (zie tip 2).
  3. Ga naar de event-handler behorende bij de knop.
  4. Schrijf in het Nederlands op hoe de code moet functioneren. Doe dit puntsgewijs.
  5. Vertaal de logica van de applet naar Java-code (zie tip 3 + hulpvragen).
  6. Controleer de code op spelfouten en ga na of elke regel eindigt op een puntkomma.
  7. Test de applicatie.

 

 

Tip 1
Zoek op internet wat de huidige koers is van de dollar.

 

Tip 2
Plaats op de applet twee widgets van het type NumberField (en dus niet TextField).

Deze widget kan je hier vinden:

 

 

Tip 3
Omdat je bij deze opdracht gebruik moet maken van twee widgets van het type NumberField kan je de methoden getText() en setText() niet gebruiken. Maak daarvoor in de plaats gebruik van de methode getDouble() en setDouble();

 

Tip 4
Hoe je aantekeningen kan plaatsen bij een blok code staat uitgelegd bij vraag 7 van de Veelgestelde vragen over Java.

 

Hulpvragen

  1. Welk datatype moet je kiezen voor de variabele die je gebruikt voor het 'opvangen' van het getal dat je terugkrijgt van de methode getDouble()?
  2. Welke operator moet je gebruiken om twee variabele (decimale getallen) met elkaar te vermenigvuldigen?
  3. Van welk datatype moet de variabele zijn die je als argument 'meegeeft' aan de methode setDouble(...)?

 

Opdracht 6.3 - Rekenmachine-applet

Doel
Het doel van deze opdracht is om te leren hoe je het maken van een applet het beste kan aanpakken. De applet die je moet bouwen, moet functioneren als een rekenmachine. Je moet met deze applet dus kunnen optellen, aftrekken, vermenigvuldigen en delen.

 

Interface
De applet moet er aan de buitenkant zou uitkomen te zien:

 

 

 

 

 

 

 

 

Aanpak

Pak deze opdracht als volgt aan:

  1. Maak een nieuwe applet aan (frame).
  2. Bouw de interface van de applet.
  3. Ga naar de event-handler toe van één van de vier knopppen.
  4. Schrijf in het Nederlands op wat er zou moet gebeuren als je op die knop klikt. Doe dit puntsgewijs (1.Haal het getal op uit invoerveldA,  2. Haal ..., 3. ...,  etc).
  5. Vertaal de logica van stap 4 naar Java-code.
  6. Herhaal stap 3 t/m  5 voor de andere drie knoppen.
  7. Controleer de code op spelfouten en ga na of elke regel eindigt op een puntkomma.
  8. Test de applicatie.

 

Tip 1
De twee invoervelden en het uitvoerveld moeten van het type NumberField zijn.
 

Deze widget kan je hier vinden:

 

Tip 2
Omdat je bij deze opdracht gebruik moet maken van widgets van het type NumberField kan je de methoden getText() en setText() niet gebruiken. Maak daarvoor in de plaats gebruik van de methode getDouble() en setDouble();

 

Tip 3
Bij onderdeel 4. Operatoren kan je een overzicht vinden van alle rekenkundige operatoren die je kan gebruiken bij het programmeren in Java.

 

Opdracht 6.4 - SparenApplet

Verhaaltje
Jane heeft een krantenwijk. Dit levert haar iedere week 60 euro op. Ze besluit om te gaan sparen voor een smartphone. Ze heeft een mooie smartphone gezien voor 570 euro en een andere voor 450 euro.

Jane wil weten hoe lang ze moet sparen als ze  iedere week de helft (50%)van haar verdiende geld spaart. Maar het zou ook zomaar kunnen zijn dat ze ervoor kiest om 40% te gaan sparen.

 

De opdracht:
Maak een applet, waarbij Jane haar weeksalaris, het deel van het salaris dat ze wil sparen en het bedrag dat ze wil sparen, kan invoeren. De uitvoer is het aantal weken dat ze moet sparen.

Let op!
Het salaris, het percentage en het gewenst spaarbedrag zijn gehele getallen, het aantal weken niet.

 

 

Bij deze opdracht is het de bedoeling dat je helemaal zelf bedenkt hoe je de applet moet maken. Tip: Doe dit zo stapsgewijs mogelijk (net zoals bij de vorige opdrachten)!

7. If-else statement

Inleiding

Laten we de EuroDollar-applet er nog eens bijpakken. Zou het niet mooi zijn als we de applet zo zouden uitbreiden dat je het aantal euro's niet alleen kan omzetten naar het aantal dollars maar ook naar bijvoorbeeld de Japanse yen en het Britse pond?

 

In opdracht 7.1 wordt uitgelegd hoe je de EuroDollar-applet kan uitbreiden zodat je het aantal euro's kan omrekenen naar twee andere valuta's (dollar en Japanse yen) en in opdracht 7.2 wordt uitgelegd hoe je de applet zo kan uitbreiden dat je het aantal euro's kan omzetten naar nog meer valuta's (in ieder geval drie).

 

Bij beide opdrachten zal je gebruik moeten maken van het if-else statement. Wat er met het if-else statement wordt bedoeld en welke code je hierbij moet schrijven, staat uitgelegd in de opdrachten.

Opdracht 7.1 - Wisselkoersen-applet I

Doel
Het doel van deze opdracht is om te leren wat er wordt bedoeld met het if-else statement en hoe je deze moet schrijven. Dit gaan we doen aan de hand van de EuroDollar-applet. Omdat we de applet zo gaan uibreiden dat je het aantal euro's kan omzetten in meerdere valuta's, is een naamwijziging van de applet wel gepast. Laten we de applet van nu af aan de Wisselkoersen-applet noemen!

 

Interface
De Wisselkoersen-applet moet er zo uitkomen te zien:

 

Zoals je ziet, is er aan de applet (t.o.v. de EuroDollar-applet) één extra invoerveld toegevoegd. Deze wordt gebruikt voor het invoeren van de munteenheid. Laten we dit  invoerveld munteenheidveld noemen.

 

Werking
De applet moet als volgt werken: als de gebruiker een 1 invoert in het munteenheidveld dan moet het aantal euro's worden omgezet naar het aantal Japanse yen, is er een ander getal ingevoerd dan een 1 dan moet het aantal euro's (nog steeds) worden omgezet in het aantal dollars.

 

Aanpak

Begin het maken van deze applet door:

  1. Een nieuwe applet aan te maken in een nieuwe map.
  2. De interface na te bouwen.

 

De interface bestaat uit de volgende widgets:

Type Naam en/of tekst in/op de widget
Label Euro, Munteenheid, Uitkomst
NumberField      euroveld, munteenheidveld, uitkomstveld
Button Bereken!
Label 1 = Japanse yen, dollars / yen

 

Let op:

  • Op de knop mag wel de tekst Bereken! staan maar het uitroepteken mag niet in de naam van de knop staan! Geef de knop dus een andere naam.

 

Code schrijven
Begin door de code te schrijven voor het ophalen van de getallen uit de invoervelden euroveld en munteenheidveld. Plaats deze code in de event-handler van de knop Bereken!.

 

  Hulpvragen

  • De gebruiker moet een decimaal getal in kunnen voeren in het euroveld. Welke actie/methode van deze widget moet je dus kiezen? En van welk datatype moet de variabele waarin je het getal 'opvangt' dus ook zijn?
  • De gebruiker moet in het munteenheid uitsluitend hele getallen kunnen invoeren. Welke actie/methode van deze widget moet je dus kiezen? En van welk datatype moet de variabele waarin je het hele getal 'opvangt' dus ook zijn?

 


Als je klaar bent met het schrijven van de code voor het ophalen van de getallen uit de invoervelden kunnen we de code gaan schrijven die ervoor zorgt dat als de gebruiker een 1 heeft ingevoerd in het munteenheidveld het aantal Japanse yen wordt berekent en als er een ander getal is ingevoerd nog steeds het aantal dollars wordt berekend.

 

Begin door een nieuwe variable aan te maken met de naam resultaat en van het datatype double. Deze variabele gaan we gebruiken voor het opslaan van het aantal Japanse yen of het aantal dollars.

 

Bij de vorige opdrachten heb je steeds in het Nederlands moeten verwoorden hoe de code moet functioneren. Laten we dat nu ook doen!

De code moet als volgt functioneren:
Als de gebruiker een 1 heeft ingevoerd dan moet het aantal Japanse yen worden berekend. Is er een ander getal dan 1 ingevoerd dan moet het aantal dollars worden berekend.

Als je bovenstaande tekst goed leest dan lees je dat er een keuze moet worden gemaakt in de code: als er een 1 is ingevoerd dan moet het aantal Japanse yen worden berekent en is dat niet het geval dan moet het aantal dollars worden berekend.

Voor het maken van een keuze in een stuk code bestaat er een speciale constructie: het if-else statement. Een if-else statement heeft altijd de onderstaande structuur.

 

If-else statement

 
if (logische expressie){

    // A

 } else {

    // B

 }

 

Uitleg
Met een logische expressie wordt een stelling bedoeld die maar twee mogelijke uitkomsten heeft; of de stelling is waar (true) of de stelling is onwaar (false).

De stelling die je voor deze applet moet schrijven, ziet er als volgt uit:

munteenheid == 1


Met het dubbele gelijkteken geef je aan dat je de twee waarden (de variabele munteenheid en het getal 1) met elkaar wilt vergelijken. Het dubbele gelijkteken is een voorbeeld van een relationele operator. Het dubbele gelijkteken is de meest gebruikte operator maar er zijn er meer. Een overzicht van alle operatoren kan je vinden op slide 62 van de presentatie Programmeren met Java.

 

Het if-else statement werkt voor de rest als volgt:

  • Als de uitkomst van de vergelijking (munteenheid == 1) waar is dan wordt de code die staat op plek A uitgevoerd.
  • Is de uitkomst van de vergelijking niet waar (bijvoorbeeld omdat de gebruiker een 2 heeft ingevoerd) dan wordt de code die staat op plek B uitgevoerd.

 

Met behulp van de bovenstaande kennis kunnen we de code voor het maken van de keuze, schrijven:

  1. Plaats in jouw code de constructie van het if-else statement (de code hierboven).
  2. Plaats tussen de twee haakjes de logische expressie munteenheid == 1.
  3. Schrijf op plek A de code die ervoor zorgt dat het aantal Japanse yen wordt berekend en wordt toegekend aan de variabele resultaat.
  4. Schrijf op plek B de code die ervoor zorgt dat het aantal dollars wordt berekend en wordt toegekend aan de variabele resultaat.

 

Vervolgens kan je de applet af maken door de code te schrijven die ervoor zorgt dat het aantal Japanse yen / dollars wordt getoond in het uitkomstveld. Plaats deze code onder het if-else statement (dit is het meest efficiënt).

 

Ben je helemaal klaar met de code? Lees deze dan nog een keer helemaal rustig door en controleer of je niet ergens een spelfout hebt gemaakt. Controleer ook of elke regel code eindigt op een puntkomma. Als je dat gedaan hebt, kan je de applet runnen en kijken of deze goed werkt. Krijg je een foutmelding? Lees dan bij Veelgestelde vragen  hoe je deze moet lezen en hoe je de fout eruit kan halen.

 

 

 

Opdracht 7.2 - Wisselkoersen-applet II

Doel
Het doel van deze opdracht is om te leren hoe je het if-else statement kan uibreiden met meerdere stellingen. Dit gaan we doen door de Wisselkoersen-applet verder uit te breiden. Met de applet moet het mogelijk worden om het aantal euro's niet alleen om te kunnen zetten naar het aantal dollars en het aantal Japanse yen maar ook naar het aantal Britse pond.

 

Interface
De Wisselkoersen-applet versie II moet er zo uitkomen te zien:

Zoals je ziet, is er geen groot verschil met de vorige versie van de Wisselkoersen-applet. Aan de applet is alleen wat tekst toegevoegd: aan '1 = Japanse yen' is toegevoegd ',  2 = Britste pond' en aan 'Dollar / yen' is toegevoegd ' / pond'.

 

Werking
De applet moet als volgt werken: als de gebruiker een 1 invoert in het munteenheidveld moet het aantal euro's worden omgezet naar het aantal Japanse yen, is er een 2 ingevoerd dan moet het aantal euro's worden omgezet naar het aantal Britse pond. Is er een ander getal ingevoerd dan een 1 of een 2 dan moet het aantal euro's (nog steeds) worden omgezet naar het aantal dollars.

 

Aanpak
Breid de interface van de Wisselkoersen-applet uit zoals hierboven staat beschreven.

 

Code schrijven
Ga naar de code van het if-else statement toe. Zoals je ziet, wordt er in dit if-else statement maar op één stelling gecontroleerd (valuta == 1) en bestaat het if-else statement uit twee delen: het deel tussen het if-statement en het else-statement en het gedeelte tussen het else-statment en de laatste accolade ( } ).

Laten we de code nu zo uitbreiden dat er op twee stellingen wordt gecontroleerd! De algemene structuur hiervoor staat hieronder. Deze constructie wordt het if-then-else statement genoemd.


If-then-else statement

 
 if (logische expressie) {

    // A

 } else if (logische expressie) {

    // B

 } else {

    // C

 }

 

Uitleg
Zoals je ziet is het if-else statement in het midden uitgebreid met een else-if statement. Hierdoor is er ruimte vrijgekomen voor het plaatsen van een nieuwe logische expressie en voor het uitvoeren van een extra blok code (op plek B).

 

Met behulp van de bovenstaande code kan je de applet nu uitbreiden:

  1. Plaats in jouw if-else statement bovenstaande else-if statement (oranje code hierboven).
  2. Schrijf de logische expressie waarmee je de inhoud van de variabele munteenheid vergelijkt met de waarde 2.
  3. Schrijf op plek B de code die ervoor zorgt dat het aantal Britse pond wordt berekend (zoek de huidige koers op internet).
  4. De code die ervoor zorgt dat het aantal dollars wordt berekend blijft tussen het else-statement en de laatste accolade staan.

 

Heb je het if-else statement uitgebreid tot het if-then-else statement? Run dan de applet en kijk of deze goed werkt!

 

 

Extra opdracht
De if-then-else constructie kan je oneindig uitbreiden met else-if statements. Je kan de applet dus blijven uitbreiden zodat het aantal euro's kan worden omgezet naar nog meer valuta's.

Zoek op internet naar de huidige koers van nog een paar valuta's en pas de applet zo aan dat het aantal euro's ook naar deze valuta's wordt omgezet

 

 

 

Opdracht 7.3 - Overwerk-applet

Omschrijving
De Overwerk-applet berekent welk bedrag aan een werknemer betaald moet worden als vergoeding voor overwerk. Als een werknemer niet heeft overgewerkt moet het getal 0 worden getoond.

De gebruiker van het applet voert een viertal gegevens in: het uurloon, het aantal uren dat de werknemer normaal werkt, de opslag voor overwerk (vergoedingspercentage) en het aantal uren dat de werknemer daadwerkelijk heeft gewerkt.

 

Lees de opdracht eerst helemaal door voordat je aan het coderen begint!

 

 

Interface

 

 

 

 

 

 

 

 

 

 

 

Aanpak

Pak deze opdracht als volgt aan:

  1. Maak een nieuwe applet.
  2. Bouw de interface van de applet (zie hierboven).
  3. Ga naar de event-handler toe.
  4. Schrijf in het Nederlands hoe de applicatie moet werken. Doe dit puntsgewijs.
  5. Vertaal de logica van stap 4 naar Java-code.
  6. Controleer de code op spelfouten.
  7. Controleer of elke regel eindigt op een puntkomma.
  8. Test de applicatie.

 

 

Voorbeeld van stap 4:

  1. Haal het uurloon op uit het uurloonveld.
  2. Haal het ...
  3. ...
  4. ...
  5. Als het gewerkte aantal uren ..... is dan het  ..... bereken dan .... .
  6. De formule voor het bereken van de vergoeding is: ...
  7. Toon het bedrag in de interface.

 

 

Tips

  • De 4 invoervelden moeten van het type NumberField zijn.
  • De uitkomst (vergoeding) kan je tonen in een widet van het type Label.
  • Kies of je hele getallen of decimale getallen wilt ophalen uit de invoervelden.
  • Bij deze opdracht heb je één if-else statement nodig.
  • In het if-else statement moet een logische expressie komen te staan. Hierbij zal je gebruik moeten maken van een relationele operator. Bij onderdeel 11 staat een overzicht van alle relationele operatoren. Welke relationele operator moet je gebruiken bij deze opdracht?
  • Bedenk zelf de formule voor het berekenen van de vergoeding voor het overwerken.
  • Ga na wat er in het eerste code blok moet komen staan (het blok tussen if en else) en wat er in het tweede code blok moet komen te staan (het blok tussen else en de laatste accolade).

 

 

Opdracht 7.4 - Inlog-applet

Opdrachtomschrijving
Het doel van deze opdracht is om een applet te maken waarmee je kan inloggen. Het verschil met een normaal inlogscherm is dat jij bij dit inlogscherm alleen kan inloggen met een gebruikersnaam en wachtwoord die beide bestaan uit een heel getal.

 

Versie I
Maak een applet met daarop de volgende drie widgets:

  • Een invoerveld voor het invoeren van de gebruikersnaam. Dit invoerveld moet van het type numberField zijn.
  • Een knop waarop staat 'Inloggen'.
  • Een uitvoerveld waarin komt te staan of het inloggen gelukt is of niet. Dit uitvoerveld kan van het type Label zijn of van het type TextField zijn.

Schrijf de code die ervoor zorgt dat als de gebruikersnaam 657321 invoert je de melding "Het inloggen is gelukt" te zien krijgt. Voer je een ander nummer in dan moet je de melding "Uw gebruikersnaam is onjuist" worden getoond.

 

Versie II
Breid de applet uit met een invoerveld voor het invoeren van het wachtwoord. Ook dit invoerveld moet van het type numberField zijn.

Breid de logische expressie van versie I zo uit dat je alleen kan inloggen als zowel de gebruikersnaam als het wachtwoord juist is. Als voorbeeld kan je het wachtwoord 123456 kiezen.

Is het inloggen gelukt dan moet de melding "Het inloggen is gelukt" worden getoond. Is de gebruikersnaam of het wachtwoord onjuist dan moet de melding "De gebruikersnaam of wachtwoord is onjuist" worden getoond.

Voor het uitbreiden van de logische expressie kan je twee operatoren gebruiken: && of ||. De operator && betekent AND en de operator || betekent OR. Hieronder staan twee voorbeelden. Welke van deze twee voorbeelden moet je gebruiken?

 

Voorbeeld 1

int a = 123;

int b = 456;

if ( a == 123 || b == 456){

  System.out.println("a is 123 of b is 456");

} else {

  System.out.println("a is geen 123 en b is geen 456");

}

 

 

Voorbeeld 2

int a = 123;

int b = 456;

if ( a == 123 && b == 456){

  System.out.println("a is 123 en b is 456");

} else {

  System.out.println("a is geen 123 en/of b is geen 456");

}

 

Opdracht 7.5 - Schrikkeljaar-applet

Opdrachtomschrijving
Maak een applet die berekent of een kalenderjaar een schrikkeljaar is of niet.

 

Interface

 

Wanneer is een jaar een schrikkeljaar?

  • Een jaar is een schrikkeljaar als het jaartal deelbaar is door 4.
  • Daar is echter een uitzondering op: als het jaar deelbaar is door 100 dan is het geen schrikkeljaar.
  • Ook op die regel is weer een uitzondering: als het jaartal deelbaar is door 400 is het wel weer een schrikkeljaar.

 

 

8. Switch statement

Het switch-statement

Het switch-statement wordt gebruikt wanneer je een groot aantal if-statements achter elkaar moet plaatsen.


Voorbeeld
Stel dat je dag van de week hebt opgeslagen als een heel getal (1 t/m 7) in de variabele dag. Je zou dan de onderstaande code kunnen schrijven voor het tonen van de naam van de dag in de applet.

1    if(dag == 1) {
2        daglabel.setText("maandag");
3    } else if(dag == 2) {
4        daglabel.setText("insdag");
5    } else if(dag == 3) {
6        dagLabel.setText("woensdag");
7    } else if(dag == 4) {
8        dagLabel.setText("donderdag");
9    } else if(dag == 5) {
10       dagLabel.setText("vrijdag");
11   } else if(dag == 6) {
12       dagLabel.setText("zaterdag");
13   } else if(dag == 7) {
14       dagLabel.setText("zondag");
15   } else {
16       dagLabel.setText("Geen geldig nummer");
17   }

 

Je krijgt een groot aantal keer else-if constructies onder elkaar en de code is daardoor minder overzichtelijk. Met het switch-statement wordt de structuur van de code duidelijker.
 

Voorbeeld van een switch-statement


1 switch(dag) {
2     case 1: dagLabel.setText("maandag");
3             break;
4     case 2: dagLabel.setText("dinsdag");
5             break;
6     case 3: dagLabel.setText("woensdag");
7             break;
8     case 4: dagLabel.setText("donderdag");
9             break;
10    case 5: dagLabel.setText("vrijdag");
11            break;
12    case 6: dagLabel.setText("zaterdag");
13            break;
14    case 7: dagLabel.setText("zondag");
15            break;
16    default:dagLabel.setText("Geen geldig nummer");
17 }

 

Een switch-statement begint altijd met het woord switch. Daarachter staat, tussen haakjes, variabele die je wilt vergelijken. Deze variabele wordt vervolgens vergelijken met alle constanten die staan achter het keyword case (bijvoorbeeld op regel 2). Als de variabele en de constante met elkaar overeenkomen dat wordt de code achter de dubbele punt uitgevoerd. Met het keyword break beeindig je de verdere uitvoering van het switch-statement. Schrijf je deze statement niet dan blijft het switch-statement door gaan van het controleren van alle cases. Meestal wil je dat niet. Met het keyword default geef je aan wat er moet gebeuren als er geen match is geweest met een van de cases.

 

 

Opdracht 8.1 - Hockey-applet

Bij hockey zijn er de onderstaande categorieën per leeftijd:

F1 6 jaar
F2 7 jaar
E1 8 jaar
E2 9 jaar
D8 10 jaar
D 11 jaar
C 12 en 13 jaar
B 14 en 15 jaar
A 16 en 17 jaar
Senioren 18 jaar en ouder

Schrijf een applet dat de juiste categorie toont als een willekeurige leeftijd wordt ingevoerd. Ook moet er een melding verschijnen als de leeftijd jonger is dan 6.

9. For-loop

Theorie

 

 

 

 

 

 

 

 

 

 

 

Wanneer je een programma schrijft dan zal ik het vaak voorkomen dat je een (of meerdere) regel(-s) code vaker wilt herhalen.

Stel bijvoorbeeld dat je de getallen 0 t/m 99 onder elkaar wilt tonen in de terminal dan zou je daarvoor de volgende code kunnen schrijven:

  System.out.println(0);
  System.out.println(1);
  System.out.println(2);
  ...
  ...
  System.out.println(99);


Bovenstaande code is legitieme code maar deze is ook zeer inefficiënt. Je schrijft tenslotte 100 keer nagenoeg dezelfde regel code op!


Om het herhalen van code efficiënter kunnen schrijven, is de for-loop1 bedacht. Dit is een constructie die in elke programmeertaal voorkomt. Met behulp van deze constructie kunnen we de bovenstaande code veel compacter schrijven:

1    for (int x = 0 ; x < 100 ; x = x + 1) {
2       System.out.println(x);
3    }

 

Als je de eerste regel code goed leest dan zie je dat deze uit drie delen is opgebouwd:

  1.   int x = 0
  2.   x < 100
  3.   x = x + 1

 


Deze drie onderdelen hebben de volgende betekenissen:

 

int x = 0
In het eerste onderdeel wordt er een nieuwe variabele aangemaakt met de naam x en van het datatype int. Tegelijkertijd wordt er aan deze variabele 0 toegekend. Dit eerste onderdeel van de for-loop wordt de initialisatie genoemd.

x < 100
In het tweede gedeelte wordt bepaald hoe vaak de loop moet worden doorlopen. In de bovenstaande code wordt de loop doorlopen tot en met de waarde 99. Is de waarde 100 bereikt dan is de stelling x < 100 niet meer waar en stopt de loop. Dit tweede onderdeel van de for-loop wordt de voorwaarde genoemd.


x = x + 1
In het derde gedeelte wordt telkens, nadat de loop één keer is doorlopen, er 1 opgetelt bij de variabele x. Dit gebeurt net zo lang totdat x de waarde 100 heeft bereikt. Dit derde onderdeel van de for-loop wordt de stapopdracht genoemd.

Hieronder staan een aantal voorbeelden van berekeningen die worden gemaakt bij het doorlopen van de stapopdracht.

loop            vergelijking      stapopdracht
1 0 < 100 1 = 0 + 1
2 1 < 100 2 = 1 + 1
3 2 < 100 3 = 2 + 1
4 3 < 100 4 = 3 + 1
5 4 < 100 5 = 4 + 1
... ... ...
99 98 < 100 99 = 98 + 1
100 99 < 100 100 = 99 + 1
101 100 < 100 wordt niet meer uitgevoerd

 

 

De code die moet worden herhaald
De code die telkens moet worden herhaald, moet tussen de beginaccolade ( { ) en de eindaccolade ( } ) komen te staan. Tussen deze twee accolades kan je één regel code plaatsen of meerderen (honderden als dat nodig is).

 

De flow van een for-loop

 

 

Samenvatting
In de eerste regel van de for-loop (de 'header') wordt bepaald bij welke waarde de loop moet starten, tot welke waarde de loop moet worden doorlopen en wat er moet gebeuren als de loop één keer doorlopen is. De code die steeds herhaald moet worden moet tussen de beginaccolade en eindaccolade staan.

 

 

 

Voetnotes

1. Loop is het Engelse woord voor rondgang, cirkel (De code van de for-loop wordt telkens opnieuw doorlopen.).

Opdracht 9.1 - Oefeningen

 

 

 

 

 

 

 

 

 

 

 

Voorbereiding
Maak een applet met daarop één knop (Button).

 

 

Oefening I
Schrijf een applet die ervoor zorgt dat, als je op de knop klikt, de getallen 1 t/m 10000 onder elkaar worden getoond in de terminal.

 

 

Oefening II
Schrijf een applet die ervoor zorgt dat, als je op de knop klikt, de tekst "Maybe if we tell people the brain is an app, they'll start using it." 100 keer onder elkaar wordt getoond in de terminal.

 

 

Oefening III
Schrijf een applet die ervoor zorgt dat, als je op de knop klikt, de getallen 43 t/m 79 onder elkaar worden getoond in de terminal.

 


Oefening IV
Schrijf een applet die ervoor zorgt dat, als je op de knop klikt, de getallen 43 t/m 79 onder elkaar worden getoond in de terminal waarbij er telkens één getal wordt overgeslagen.

In de terminal moet het volgende te zien zijn:

 43
 45
 47
 ...
 ...
 77
 79

 


Oefening V
Schrijf een applet die ervoor zorgt dat, als je op de knop klikt, de tekst "Error" oneindig vaak onder elkaar wordt getoond in de terminal (De applet kan je afsluiten door nog een keer op de run-knop te klikken).

 

 

Oefening VI
Schrijf een applet die ervoor zorgt dat, als je op de knop klikt, het kwadraat van de getallen 1 t/m 20 onder elkaar worden getoond in de terminal.

In de terminal moet het volgende te zien zijn:

 1
 4
 9
 16
 25
 36
 ..
 361
 400

 

 

Oefening VII
Schrijf een applet die ervoor zorgt dat, als je op de knop klikt, het onderstaande figuur wordt getoond in de terminal.

*
**
***
****
*****
******
*******
********
*********
**********

 

Bij deze oefening zal je gebruik moeten maken van het plusteken (+)  voor het steeds samenvoegen van twee stukken tekst (Strings).

 

Opdracht 9.2 - Strafwerk-applet

Maak een applet die strafwerkregels kan genereren. De gebruiker vult in het eerste tekstvak de strafregel in die moet worden herhaald en in het tweede tekstvak (Numberfield) geeft hij aan hoe vaak die strafregel moet worden herhaald. Door op de knop te druk moet het strafwerk worden gegenereerd.


De applet moet er zo uitkomen te zien:



Gebruik voor het tonen van de strafwerkregels een TextArea widget. Het verschil tussen de widgets TextField en TextArea is dat je met TextField maar één regel kan tonen en met TextArea meerdere regels.


Versie 1
Maak de applet door gebruikt te maken van de actie append() van de widget TextArea. Tussen de twee haakjes moet je vermelden welke tekst je telkens aan de TextArea wilt toevoegen.


Versie 2
Maak de applet door geen gebruik te maken van de actie append() maar van de actie setText().

Let op: je kan de actie setText() maar één keer uitvoeren! Met andere woorden: je kan maar één keer de tekst in de interface van de applet plaatsen!


Tips

  1. Maak boven de for-loop een variabele aan van het datatype String die al het strafwerk gaat bevatten. Geef deze variabele de beginwaarde "" (een lege String).
  2. Plaat in de for-loop de code waarmee je telkens één regel strafwerk toevoegt aan de variabele die je bij stap 1 hebt gedefinieerd.

    In pseudocode ziet deze regels er als volgt uit:
    al-het-strafwerk = al-het-strafwerk + nieuwe-regel;

    Met het plusteken (+) 'lijm' je twee stukken tekst aan elkaar. Dit wordt 'String concatenation' genoemd (zie onderdeel 4. Operatoren).
  3. Maak de applet af door het totale strafwerk in de interface van de applet te plaatsen.

 

 

 

Opdracht 9.3 - Tafel-applet

Maak een applet waarmee je voor elk getal de bijbehorende tafel kan genereren. De applet moet als volgt functioneren: de gebruiker voert een getal in en als hij op de knop Toon tafel klikt, moet in het tekstveld (widget: TextArea) eronder de hele tafel worden getoond.



De applet die je moet maken, moet er als volgt uitkomen te zien:

 

 

 

 

 

 

 

 

 

 

Bij deze opdracht zal je een stuk tekst (bijvoorbeeld " x ") moeten samenvoegen met het getal wat ervoor of erachter komt te staan. Hiervoor kan je dezelfde techniek gebruiken als bij opdracht 9.2. Met andere woorden: je kan een stuk tekst en een getal samenvoegen m.b.v. het plusteken (+). Het getal wordt dan op de achtergrond automatisch omgezet van een integer (heel getal) naar een String.

 

 

Versie 1
Schrijf de applet op zo'n manier dat er alleen tafels van hele getallen kunnen worden getoond.


Versie 2
Herschrijf de code zo dat de applet ook tafels van decimale getallen kan tonen.
 


 

Opdracht 9.4 - Syracuserij-applet

In deze opdracht moet je een applet schrijven dat een Syracuserij maakt van een getal. Een Syracuserij is een rij getallen die begint met een positief, geheel getal. Het volgende getal in de rij krijg je door het getal door twee te delen, als het getal even is. Is het een oneven getal, dan wordt het getal met 3 vermenigvuldigd en vervolgens wordt bij het resultaat 1 opgeteld.

 

In de afbeelding hieronder zie je de Syracuserij van het getal 7.

 

Bij 1 stopt de rij omdat daarna de reeks 4 2 1 steeds herhaald wordt.

 

 

 

 

Opdracht 9.5 - Fibonacci-applet

In 1202 vroeg de Leonardo van Pisa (ook wel Fibonacci genoemd) zich af hoe snel konijnen zich in ideale omstandigheden voortplanten. Hij stelde zichzelf de vraag: hoeveel konijnenparen zullen er na een jaar zijn, wanneer er een pasgeboren stel konijnen, een mannetje en een vrouwtje, wordt losgelaten op een terrein?

 

Daarbij ging hij uit van de volgende voorwaarden:

  • elk baby-konijnenpaar is na één maand volwassen en vruchtbaar
  • elk volwassen konijnenpaar brengt na elke maand één baby-konijnenpaar (een mannetje en een vrouwtje) voort
  • er sterft geen enkel konijn

 

Uitgesplitst naar babyparen en volwassen paren:

Maand 1 2 3 4 5
Aantal babyparen 1 0 1 1 2
Aantal volwassenparen 0 1 1 2 3

 

In de eerste maand is er één baby-konijnenpaar, de tweede maand is dat paar volwassen geworden en in de derde maand komt er een baby-konijnenpaartje bij etc.

 

A. Maak het onderstaand schema af:

Maand 1 2 3 4 5 6 7 8 9
Aantal babyparen 1 0 1 1 2 3      
Aantal volwassenparen 0 1 1 2 3 5      
Totaal aantal paren 1 1 2 3 5        

 

​B. Hoe bepaal je het totaal aantal paren in maand 8?

C. Hoe bepaal je het totaal aantal paren in maand n?

 

Schrijf een applet dat het aantal konijnenparen geeft dat op een willekeurige maand n in het veld rondloopt.


 

 

 

 

10. While-loop

RenteApplet

Wanneer je geld op een spaarrekening zet, dan krijg je daar rente over. Het kapitaal op de spaarrekening groeit. Om uit te rekenen hoe groot dat kapitaal na een aantal jaar geworden is, kun je een algoritme bedenken en een programma schrijven. De gebruiker van je programma moet eerst een aantal gegevens invoeren: het beginkapitaal, het aantal termijnen en de rente (in procenten). Voor het gemak kun je ervan uitgaan dat de jaarrente een geheel getal is. Wanneer er een termijn verstreken is, moet bij het kapitaal de rente opgeteld worden. Bij de volgende termijn berekent het programma natuurlijk de rente over het nieuwe kapitaal. Dat gaat door tot de laatste termijn is verstreken en dan ziet de gebruiker het kapitaal op het scherm verschijnen.

Het Java-applet heeft drie invoervelden die je heldere namen als beginkapitaalVeld, renteVeld en termijnenVeld geeft.
Je moet ook een uitvoerveld maken, bijvoorbeeld eindkapitaalVeld, en een berekenKnop opnemen.

 

Voor de berekenKnop moet je een event-handler schrijven. De code hiervoor is:

int beginkapitaal;
beginkapitaal = Integer.parseInt(beginkapitaalVeld.getText());
int rente;
rente = Integer.parseInt(renteVeld.getText());
int termijnen;
termijnen = Integer.parseInt(termijnenVeld.getText());
int kapitaal;
kapitaal = beginkapitaal;
int termijn;
termijn = 1;
while (termijn <= termijnen){
  kapitaal = kapitaal + kapitaal * rente / 100;
  termijn = termijn + 1;
}
eindkapitaalVeld.setText(String.valueOf(kapitaal));

★ Aan de slag 18

In deze opdracht gaan we stap voor stap het RenteApplet maken:

  1. Ontwerp de user interface van het RenteApplet. In JavaEditor kan gekozen worden voor een TextField of een NumberField. Gebruik voor het applet tekstvelden. We leggen later uit waarom we dit doen.
  2. Voer de event-handler in.
  3. Sla het applet op.
  4. Test het applet

Operaties - operanden

Toekenning door operaties op operanden
Kijk eens naar de toekenning (ook wel assignment):

kapitaal = kapitaal + kapitaal * rente/100;

Aan de rechterkant staat een expressie waarin verschillende operaties voorkomen. Hier zijn dat: optellen, vermenigvuldigen en delen.
Operaties werken op operanden. In dit geval zijn dat de constante 100 en de variabelen kapitaal en rente

Bij de toekenning aan de variabele kapitaal wordt eerst de expressie aan de rechterkant uitgerekend. Daarbij maakt het programma gebruik van de “oude” waarde van kapitaal. Het resultaat van de berekening wordt daarna toegekend aan de variabele kapitaal. Daarmee gaat de “oude” waarde van kapitaal verloren.

De toekenning kapitaal = kapitaal + kapitaal * rente/ 100; staat in een herhalingslus:

while(termijn <= termijnen){
  kapitaal = kapitaal + kapitaal * rente/100;
  termijn = termijn + 1;
}


Het woord while (zolang) geeft het begin van de lus aan. Een while-opdracht heeft altijd de volgende vorm:

while(voorwaarde){opdracht of opdrachten}

De voorwaarde tussen de ronde haken is een expressie, hier:

(termijn <= termijnen)

Het resultaat daarvan moet een waarde zijn van het type boolean. Dit type kan maar twee waarden aannemen: true (waar) of false (niet waar). Een expressie van dit type wordt ook wel een logische expressie genoemd. Als het resultaat van de voorwaarde true is, dan worden de opdrachten tussen de accolades uitgevoerd en wordt de lus nogmaals verwerkt. Als het resultaat false is, dan worden de opdrachten tussen de accolades overgeslagen en wordt de lus beëindigd.

In het RenteApplet geldt dat het ofwel waar is dat termijn kleiner is dan of gelijk aan termijnen ofwel dat het niet waar is. Als het waar is, dan wordt het kapitaal met de rente verhoogd. Als het niet waar is, dan wordt de lus beëindigd.

Herhaling met while

Bekijk de event-handler van de berekenKnop van het RenteApplet:

int beginkapitaal;
beginkapitaal = Integer.parseInt(beginkapitaalVeld.getText());
int rente;
rente = Integer.parseInt(renteVeld.getText());
int termijnen;
termijnen = Integer.parseInt(termijnenVeld.getText());
int kapitaal;
kapitaal = beginkapitaal;
int termijn;
termijn = 1;
while (termijn <= termijnen){
  kapitaal = kapitaal + kapitaal * rente / 100;
  termijn = termijn + 1;
}
eindkapitaalVeld.setText(String.valueOf(kapitaal));

  1. Welke operaties staan er in deze programmacode?
  2. Op welke operanden werken de operaties in deze programmacode?
  3. Waar begint de herhalingslus?
  4. Van welk type is de voorwaarde in een while-opdracht?
  5. Hoe heet een expressie van dit type?

Statements

Opdrachten worden ook wel statements genoemd.
Voorbeelden van elementaire statements zijn:

  • de declaratie int beginkapitaal;
  • de toekenning termijn = termijn + 1;

Ook de while-opdracht is een statement, maar dan wel een samengesteld statement. Elementaire statements worden altijd afgesloten met een puntkomma, maar een samengesteld statement niet.

while(termijn <= termijnen)
{
kapitaal = kapitaal + kapitaal * rente/100;
termijn = termijn + 1;
}

 

★ Aan de slag 22

In de interactieve module lees je wat statements zijn.

  1. Geef een voorbeeld van een elementair statement.
  2. Geef een voorbeeld van een samengesteld statement.

★ Aan de slag 23

  1. Zet in de regel kapitaal = kapitaal + kapitaal * rente / 100;
    kapitaal + kapitaal tussen haakjes.
    Wat gaat er fout?
  2. Zet vervolgens rente / 100 tussen haakjes.
    Kun je verklaren wat er gebeurt?

★ Aan de slag 47

  1. Ontwerp de interface van het DobbelApplet.
  2. Voer de event-handler van de dobbelKnop in.

★ Aan de slag 50

In de programmacode moet het statement als volgt worden aangepast :

uitkomst = (int) (x + y);

  1. Waarom moet voor de expressie (int) staan?
  2. Waarom staat (x + y) tussen haakjes?

.

11. Relationele operatoren

Overzicht relationele operatoren

Hieronder staat het overzicht van alle relationele operatoren die je kan gebruiken in Java. Relationele operatoren gebruik je om twee waarden en/of variabelen met elkaar te vergelijken.

 

  operator    betekenis
<  kleiner dan
>  groter dan
<=  kleiner dan of gelijk aan
>=  groter dan of gelijk aan
==  is gelijk aan
!=  is ongelijk aan

 

 

12. Boolean logic

Type boolean

Het type boolean kan maar twee waarden hebben: true of false. In het volgende deel van een stukje programmacode zie je het gebruik van het type boolean in combinatie met een if-statement:

boolean ok = a > 10;
if (ok)
  tekstLabel.setText(”Je bent klaar”);


Op het type boolean kunnen de logische operatoren &&, ||en ! werken. Het resultaat van een expressie met logische operatoren is van het type boolean. De &&-operator is de logische AND. In de expressie x && y is het resultaat alleen true als zowel x als y true zijn.

x y x && y
false false false
true false false
false true false
true true true

 

De ||-operator is de logische OF. In de expressie x || y is het resultaat true als x of y true is of beiden true zijn.

x y x || y
false false false
true false true
false true true
true true true

 

De !-operator is de logische NOT. In de expressie !x is het resultaat true als x false is en is het resultaat false als x true is.

x !x
true false
false true

Net zoals *, / en % voor numerieke typen (int, float, etc.) een hogere prioriteit hebben dan + en , heeft ! een hogere prioriteit dan && en die weer een hogere dan ||.

Om waarden met elkaar te kunnen vergelijken kent Java een aantal relationele operatoren:

< kleiner dan
> groter dan
<= kleiner dan of gelijk aan
>= groter dan of gelijk aan
== is gelijk aan
!= is ongelijk aan

 

Een relationele operator vergelijkt het resultaat van twee expressies (van numeriek type) met elkaar, bijvoorbeeld a >= b + c;. Het resultaat is van het type boolean.

 

Opdracht 12.1

Geef het resultaat van de volgende expressies wanneer x = true en y = false:

  1. x || y
  2. x && y
  3. x && !y

 

Opdracht 12.2

Geef het resultaat van de volgende expressies wanneer x = 10 en y = 5:

  1. x > y
  2. x == y
  3. x != y
  4. x > y && x – y == 6
  5. x > y || x – y == 6

 

13. Casting

Numerieke variabelen

Conversie van numerieke variabelen
In het onderstaande voorbeeld levert de conversie geen probleem op:

int x, y ;
x = 10 ;
y = 20 ;
double resultaat ;
resultaat = x + y ;

In het statement resultaat = x + y; komen twee verschillende typen voor, maar Java kan die zonder problemen converteren. De int-waarde van het resultaat wordt geconverteerd naar double. Dit wordt een impliciete conversie genoemd.

Het volgende voorbeeld geeft wel een probleem:

double x, y;
x = 1,5;
y = 2,7;
int uitkomst;
uitkomst = x + y;

In het voorbeeld wordt geprobeerd een getal van het type double te converteren naar int: uitkomst = x + y; Dit staat Java niet zonder meer toe, want er kan dan informatie verloren gaan. Wanneer hier toch een conversie gewenst is, kan dat met behulp van een expliciete conversie. Dit wordt casting genoemd (“in een bepaalde vorm gieten”). Om een expressie naar een bepaald type te converteren schrijven we de typenaam tussen haakjes voor de expressie:

(typenaam)expressie

Door het woord int tussen haakjes voor de expressie te zetten, geef je Java de opdracht om x + y te converteren naar int.

★ Aan de slag 48

In het eerste voorbeeld is er sprake van een conversie van int naar double.
Waarom zou Java deze conversie zonder problemen uitvoeren?

★ Aan de slag 49

In het tweede voorbeeld is er sprake van een conversie van double naar int.
De compiler geeft hier een foutmelding.
Wat zou de reden van de foutmelding zijn?

★ Aan de slag 51

Wat is het verschil tussen een impliciete en een expliciete conversie?

★ Aan de slag 54

Geef het resultaat van de volgende berekeningen:

  1. int uitkomst = 5 / 4;
  2. double resultaat = 5 / 4;
  3. double resultaat = 5.0 / 4;
  4. double resultaat = (double) 5 / 4;

14. Willekeurige getallen

Random getallen

Het maken van random getallen (toevalsgetallen) komt veel voor in allerlei programma’s. In Java maak je een random getal met behulp van de methode random() uit de klasse Math. We nemen als voorbeeld een applet die het werpen van een dobbelsteen simuleert. In de event-handler van de dobbelKnop komt de volgende code te staan:

double randomGetal = Math.random();
int worp = (int)(6*randomGetal) + 1;
dobbelsteenVeld.setInt(worp);


In de eerste regel staat de methode random() uit de klasse Math. Met deze methode kun je willekeurige getallen laten berekenen. Elke keer als je de methode random() aanroept, levert dat een willekeurig reëel getal van 0.0 tot 1.0 op (1.0 komt zelf niet voor).
In de tweede regel staat een expressie waarvan het resultaat een getal is uit de verzameling {1, 2, 3, 4, 5, 6}.
Het resultaat van de expressie is van het type double. De variabele worp, waarin het resultaat wordt opgeslagen, is van het type int. Je kunt je afvragen of dat zomaar kan.

★ Aan de slag 52

In het voorbeeld van de dobbelsteen geeft de code
int worp = 6 * randomGetal + 1; hetzelfde conversieprobleem. Omdat in dit geval een conversie gewenst is, converteren we het getal van het type double naar int:

int worp = (int) (6 * randomGetal) + 1;

We komen nog even terug op de deling uit het onderdeel over operatoren. Bekijk het volgende voorbeeld:

double resultaat = 15 / 2 ;

Het resultaat van deze deling wordt opgeslagen in een variabele van het type double. Je zou verwachten dat in resultaat de waarde 7.5 wordt opgeslagen. Dat is niet het geval. De uitkomst is 7. De verklaring is dat hier twee gehele getallen op elkaar gedeeld worden. Er is hier sprake van een gehele deling waarvan de uitkomst 7 is. Deze uitkomst wordt opgeslagen in de variabele resultaat middels een impliciete conversie: 7.0. Ook in dit geval zal er een expliciete conversie moeten plaatsvinden:

double resultaat = (double) 15 / 2 ;

  1. Pas het DobbelApplet aan, zodat je met twee dobbelstenen gooit en daarbij het totaal aantal ogen telt.
  2. Pas het DobbelApplet aan, zodat het resultaat van een worp een even getal is: {2, 4, 6, 8, 10, 12}.

★ Aan de slag 53

Bekijk de volgende programmacode:

double resultaat;
resultaat = 4.5 + 7 / 2;

  1. Welke andere waarde dan de waarschijnlijk bedoelde 8.0 zal in resultaat worden opgeslagen?
  2. Leg uit hoe dat komt.
  3. Verbeter de code zodat wel het juiste resultaat wordt opgeslagen in resultaat.

 

15. Praktische opdrachten II

Opdracht 15.1

Bij een sportwedstrijd wordt er vaak getost met een munt om te bepalen welke ploeg de bal uit mag nemen. De kans dat kop of munt gegooid wordt, is even groot. Tenminste dat nemen wij aan.

Schrijf een applet dat tienduizend keer een munt opgooit. Van iedere worp moet het programma bijhouden of het kop of munt is.

Opdracht 15.2

De docent wiskunde heeft jou gevraagd een programma te maken, waarmee zijn leerlingen het optellen van twee getallen kunnen oefenen. Hij wil dat het programma een nieuwe som maakt als de leerling op de knop Nieuwe som klikt. De twee getallen, die opgeteld moeten worden, liggen tussen de 0 en de 100.

 

Gebruik instance variabelen om de twee getallen op te slaan.

Opdracht 15.3

Op het Enigma-College worden leerlingen van het eerste leerjaar beoordeeld op grond van 7 rapportcijfers. Daarbij worden de volgende regels toegepast:

  • Rapportcijfers zijn gehele getallen van 3 tot en met 10.
  • De cijfers 1 en 2 worden niet gegeven.
  • Een leerling met 1 of meer drieën wordt afgewezen (blijft zitten).
  • Een leerling met 3 of meer vieren wordt afgewezen.
  • Een leerling met 2 vieren en 1 of meer vijven wordt afgewezen.
  • Een leerling met 2 of meer vijven en 1 vier wordt afgewezen.
  • Een leerling met 3 of meer vijven wordt afgewezen.
  • Een leerling met 2 vieren of 1 vier en 1 vijf en met in het totaal 42 punten of meer wordt besproken; is het minder dat 42 dan wordt hij afgewezen.
  • In alle overige gevallen wordt de leerling bevorderd.

Schrijf een applet dat bepaalt of een leerling afgewezen is, besproken moet worden of bevorderd is. De invoer van het programma bestaat uit vier getallen: het aantal drieën, het aantal vieren, het aantal vijven en het puntentotaal. De uitvoer bestaat uit één van de woorden Bevorderen, Bespreken of Afwijzen (conform de regels).

Opdracht 15.4

Het raadspel is een eenvoudig spelletje waarbij een speler een getal tussen de 1 en de 100 in gedachten moet nemen. De andere speler moet het getal raden. De eerste speler geeft na elke gok aan of het getal dat de tweede speler geraden heeft te hoog, te laag of precies goed is. Schrijf een versie van het raadspel, waarbij de computer een getal tussen de 1 en 100 neemt en de speler het getal moet raden.

Gebruik een instance variabele om het te raden getal op te slaan.

 

Opdracht 15.5

Schrijf een versie van het raadspel, waarbij de speler een getal tussen de 1 en de 100 in gedachten neemt en de computer het getal moet raden. Bedenk daarbij een goed algoritme voor de computer om het getal te raden.

Opdracht 15.6

Hiernaast zie je een afbeelding van een eenvoudige rekenmachine. Deze rekenmachine kan van twee reële getallen de som, het verschil, het product en het quotiënt bepalen. Als decimaalteken wordt de punt gebruikt. Een gebruiker voert in door op de toetsen van de rekenmachine te klikken.

Schrijf een versie van de rekenmachine.

Opdracht 15.7

Charles en Ada gaan regelmatig naar het casino om roulette te spelen. Ze spreken iedere keer af hoeveel geld ze mee zullen nemen. De ene avond is dat € 10, een andere avond kan dat € 100 zijn.
De basisinzet is € 1.

Charles speelt uitsluitend op oneven en Ada uitsluitend op even. Bij winst wordt in dat geval de inzet verdubbeld. Beide spelers hebben een methode bedacht die hun beginkapitaal moet verdubbelen.

Wanneer Charles verliest dan verdubbelt hij zijn inzet. Wanneer hij wint dat gaat hij terug naar de basisinzet.

Ada verhoogt bij verlies de inzet met € 1 en bij winst gaat zij ook terug naar de basisinzet.

De kans dat het balletje op even of op oneven valt is even groot, maar niet helemaal 50%. Op de roulette bevinden zich ook twee vakjes met het opschrift 0 en 00. Wanneer daar het balletje op valt, wint de bank.

Schrijf een applet dat een bezoek van Charles en Ada aan het casino simuleert.
Zorg ervoor dat er verschillende beginkapitalen opgegeven kunnen worden.

16. Werken met Strings

Inleiding

Voor het werken met Strings (rijen tekens) kent Java de klasse String. Een voorbeeld van een String is “ENIGMA”, maar ook “2021”. Het feit dat een String geen primitief type is, maar een instantie van de klasse String maakt dat het werken met Strings anders is dan het werken met een variabele van bijvoorbeeld het type int.
De oorzaak van dit verschijnsel ligt in het feit dat alle klassen, dus ook String referentietypen zijn. De ==-operator vergelijkt alleen de referenties (verwijzingen naar het geheugenplaatsen), en niet de objecten zelf. Die staan in het geheugen. Om te controleren of twee strings dezelfde inhoud hebben kun je dus niet de operator == gebruiken, maar moet je een methode gebruiken. Je kunt bijvoorbeeld met de methode equals() controleren of twee strings gelijk zijn. Deze methode geeft als resultaat een boolean-waarde:

String naam1 = “Jan”;
String naam2 = “Piet”;
if (naam1.equals(naam2))
  resultaatLabel.setText(“Gelijk”);
else
  resultaatLabel.setText(“Ongelijk”);

★ Aan de slag 65

  1. Ontwerp de interface zoals hiernaast is aangegeven.
  2. Gebruik de volgende namen voor de objecten:
    intKnop, stringKnop, invoerVeld en resultaatVeld
  3. Neem de code voor de event-handler van de intKnop over:
    public void intKnopActionPerformed(ActionEvent evt) {
    int x = Integer.parseInt(invoerVeld.getText());
    int y = Integer.parseInt(invoerVeld.getText());
    if (x == y)
      resultaatVeld.setText("Gelijk!");
    else
      resultaatVeld.setText("Verschillend!");
    }

     
  4. Neem de code voor de event-handler van de stringKnop over:
    public void stringKnop_ActionPerformed(ActionEvent evt) {
    String x = invoerVeld.getText();
    String y = invoerVeld.getText();
    if (x == y)
      resultaatVeld.setText("Gelijk!");
    else
      resultaatVeld.setText("Verschillend!");
    }
     
  5. Typ een getal in het invoerVeld.
  6. Druk op de int-knop.
    Wat is het resultaat?
  7. Druk op de String-knop.
    Wat is het resultaat?
  8. Welke conclusie trek je uit de bovenstaande resultaten?
.

★ Aan de slag 66

Pas de event-handler van de stringKnop aan, zodat deze wel het gewenste resultaat oplevert.

PalindroomApplet

Een palindroom is een woord dat je ook van achter naar voor kunt lezen. Het volgende applet controleert of een woord een palindroom is. Voorbeelden van dergelijke woorden zijn kok, lepel, kayak, parterretrap. Het applet heeft een invoerveld waar het woord wordt ingetypt. In een label wordt aangegeven of het woord een palindroom is of niet. In het applet wordt een aantal methoden uit de klasse String gebruikt. Voor de controleerKnop moet je een event-handler schrijven.
De code hiervoor is:

String woord = invoerVeld.getText();
int aantal = woord.length();
String omgekeerd = "";
for (int index = 0; index < aantal; index ++) {
  String letter = woord.substring(index, index + 1);
  omgekeerd = letter + omgekeerd;
}
if (woord.equals(omgekeerd))
  uitvoerLabel.setText("Palindroom");
else
  uitvoerLabel.setText("Geen palindroom");

★ Aan de slag 67

  1. Ontwerp de interface voor het PalindroomApplet.
  2. Voer de event-handler in.

Gebruik methoden

In de tweede regel geeft de methode length() als resultaat het aantal tekens van de string.
Deze methode heeft als resultaattype een int en heeft geen argument: int length().
In regel 4 staat een for-lus, die er voor zorgt dat het woord letter voor letter wordt langs gelopen. De variabele index geeft de positie van de letter in een string aan. De eerste letter staat op positie 0!
In regel 5 wordt met behulp van de methode substring een letter uit het woord gehaald. De methode substring geeft als resultaat een string die een deel is van de oorspronkelijke string. Deze methode heeft als resultaattype een String en heeft twee argumenten van het type int, die het begin en het einde van de string markeren:

String substring(int, int)

★ Aan de slag 68

In het PalindroomApplet wordt de methode length() gebruikt.

  1. Van welke klasse is length() een methode?
  2. Wat is het resultaattype van de methode length()?

★ Aan de slag 69

In de for-lus van het PalindroomApplet staat de logische expressie index < aantal. Waarom niet index <= aantal?

★ Aan de slag 70

De methode substring() uit de klasse String heeft twee argumenten van het type int: String substring(int, int).

  1. Wat geeft het eerste argument aan?
  2. Wat geeft het tweede argument aan?

★ Aan de slag 72

In het PalindroomApplet worden twee strings met elkaar vergeleken met de methode equals().

  1. Met welke andere methode kun je twee strings vergelijken? (Kijk in de bijlage bij de inleiding)
  2. Wat is het verschil tussen beide methodes?

Conversie Strings

Om een getal naar een string te converteren, kent de klasse String de methode valueOf(). Deze methode kan als argument een variabele van het type int hebben, maar ook van het type double. Het resultaat is van het type String:

int getal = 1234;
double resultaat = 12.34;
String tekstGetal = String.valueOf(getal);
String tekstResultaat = String.valueOf(resultaat);
uitvoerVeld.setText(tekstGetal+ “ “ + tekstResultaat);


Omgekeerd moet het ook mogelijk zijn om van een string een getal te maken. Als eerste bekijken we de conversie van String naar int. De klasse Integer bevat een methode parseInt() die als argument een variabele van het type String heeft. Het resultaat is van het type int:

int getal = Integer.parseInt(“5“);

Voor de conversie naar double kent Java de methode parsedouble() uit de klasse Double. Deze methode heeft als argument een variabele van het type String. Het resultaat is van het type double:

double resultaat = Double.parseDouble(“12.34“);

Alleen strings die een int-waarde voorstellen kunnen worden geconverteerd: “5” Wanneer een string niet de juiste vorm heeft en je in bovenstaand voorbeeld in plaats van 5 “ENIGMA” invult, levert dit een foutmelding (Exception) tijdens de verwerking van het programma op.

In de klasse String zit een groot aantal methoden, waar elke instantie van de klasse String gebruik kan maken. Een aantal methoden hebben we de revue laten passeren, zoals length(), substring(), equals() en valueOf(). In de bijlage bij deze module vind je een overzicht van een aantal veelgebruikte methoden uit de klasse String.

Toets 2

Adaptieve toets

In de volgende toets wordt getoetst wat je inmiddels zou moeten weten over het onderwerp programmeren in Java.
Klik op de link en maak de toets:

Strings

★ Aan de slag 73

  1. Op welke manier kan een getal naar een string worden geconverteerd?
  2. Op welke manier kan een string naar een getal worden geconverteerd?

★ Aan de slag 74

In deze opdracht moet je een applet schrijven dat uit een woord de klinkers ( de letters e, a, o, i, u) haalt. De gebruiker moet eerst een woord intypen. Het applet loopt het woord letter voor letter langs en controleert of een letter een klinker. Als het geen klinker is dan moet de letter meegenomen worden naar het nieuwe woord.

★ Aan de slag 75

Schrijf een applet die alleen de letters op de oneven posities in een woord toont.

★ Aan de slag 76

Je krijgt de opdracht om een codeermachine te bouwen.

De machine werkt als volgt: Een gebruiker typt in het normaalVeld een tekst in. Door op de knop Codeer te klikken verschijnt de tekst in het codeerVeld. Om te decoderen klikt de gebruiker op de knop Decodeer. De gecodeerde tekst in het codeerVeld wordt weer gecodeerd teruggeplaatst in het normaalVeld.

Het algoritme om de tekst te coderen luidt als volgt: Je loopt de tekst door en je begint bij de eerste letter (positie 0). Dan sla je een letter over en je neemt de letter op positie 2. Zo ga je door totdat je aan het eind van de tekst bent aangekomen.

Vervolgens ga je terug naar het begin van de tekst. Dan neem je de tweede letter (positie 1). Je slaat een letter over en je neemt de letter op positie 3. Wanneer je weer aan het eind van de tekst bent aangekomen heb je de tekst gecodeerd.

★ Aan de slag 77

Het applet hiernaast zet gehele getallen om in Romeinse cijfers. De Romeinen gebruikten de volgende symbolen voor hun getallen:

I 1
V 5
X 10
L 50
C 100
D 500
M 1000

 

  1. Hoe worden de volgende getallen in Romeinse cijfers genoteerd?
    14
    19
    148
    1954
  2. Schrijf een applet dat een geheel getal tot en met 3000 omzet naar Romeinse cijfers. Kijk in het overzicht van methoden voor methoden van de klasse String.

 

Exceptions

In het applet die gehele getallen omzet naar Romeinse cijfers moet de invoer uit cijfers bestaan. Wanneer de gebruiker van het applet bijvoorbeeld vijftien in plaats van 15 zal dat tot een foutmelding leiden. Hetzelfde gebeurt als de gebruiker niets intypt. De programmeur moet dit soort fouten van de gebruiker afvangen. In Java worden deze fouten exceptions genoemd. We bekijken het volgende programmacode:

try {
   double inkomsten = Double.parseDouble(inkomstenVeld.getText());
   double uitgaven = Double.parseDouble(uitgavenVeld.getText());
   saldoVeld.setText(String.valueOf(inkomsten-uitgaven));
}
catch (NumberFormatException e) {
   foutmeldingLabel.setText("Ongeldige invoer");
}


De gebruiker moet in het inkomstenveld en het uitgavenveld zijn inkomsten en uitgaven intypen. Het programma berekent vervolgens het saldo. Wanneer de gebruiker echter geen getal intypt dan gaat het mis, want de methode valueOf() kan de string niet omzetten naar een getal. Om dit op te lossen wordt hier een statement gebruikt dat de fouten afvangt. De vorm van dit statemant zie je op de volgende pagina.

try {
   een serie statements
}
catch (eenException e) {
   afhandeling van de exception
}

In het try-blok worden de statements uitgevoerd. Wanneer er geen exception optreedt, dan wordt het catch-blok genegeerd. Als er wel een exception optreedt, dan kunnen we specificeren dat het catch-blok moet worden uitgevoerd door de klasse van exception aan te geven die we willen opvangen: NumberFormatException. (In de API Reference staat aangegeven dat bij een exception de methode parseDouble() van de klasse Double een component van de klasse NumberFormatException produceert.) Als er een ander soort exception optreedt, wordt de catch niet uitgevoerd.

 

★ Aan de slag 78

Pas het applet van de Romeinse getallen aan zodat het applet bestand is tegen onjuiste invoer.

17. Overzicht methoden

18. Antwoorden

Bij dit onderdeel kan je de antwoorden op een aantal opdrachten vinden. Klik aan de linkerkant op de opdracht waarvan je het antwoord wilt zien.

Opdracht 3.5

 

In de code bij opdracht 3.5 worden de volgende variabelen gedeclareerd:

  • De variabele naw. Deze is van het datatype String.
  • De variabele teller. Deze is van het datatype int.
  • De variabelen a en b. Deze zijn beide van datatype int.

 

En in de code staan de volgende toekenningen:

  • De tekst "Alan Turing" + "\n" + "ENIGMA-way" + "\n" + "Silicon Valley" wordt toegekend aan de variabele naw.
  • Het hele getal 1 wordt toegekend aan de variabele teller.
  • Het hele getal 17 wordt toegekend aan de variabele a.
  • Het hele getal 3 wordt toegekend aan de variabele b.
  • De variabele b wordt toegekend aan de variabele a.

Opdracht 3.6

 

De antwoorden op de vragen zijn:

a.  Op regel 2 staat de toekenning.

b.  De expressie in die regel is invoerveld.getText() en de variabele waaraan de opgehaalde tekst wordt toegekend is naam.

c.  Alleen op regel 1 staat er een declaratie.

d.  De variabele naam is van het datatype String.

e.  De twee dubbele aanhalingstekens achterelkaar staan voor een lege String. Hiermee wordt het invoerveld leeggemaakt.

Opdracht 4.1

 

I. havo (x / y)

a. 3

b. 1.75

c. Je krijgt een foutmelding omdat je niet kan/mag delen door 0.

 

 

II. vwo (x % y)

a. 1

b. 1.5

c. Je krijgt een foutmelding omdat je geen modulo kan/mag berekenen met 0.

 

  • Het arrangement Hoofdstuk 4 Java is gemaakt met Wikiwijs van Kennisnet. Wikiwijs is hét onderwijsplatform waar je leermiddelen zoekt, maakt en deelt.

    Auteur
    Wikiwijs Wikiwijs Je moet eerst inloggen om feedback aan de auteur te kunnen geven.
    Laatst gewijzigd
    2019-06-04 21:05:23
    Licentie

    Dit lesmateriaal is gepubliceerd onder de Creative Commons Naamsvermelding 3.0 Nederlands licentie. Dit houdt in dat je onder de voorwaarde van naamsvermelding vrij bent om:

    • het werk te delen - te kopiëren, te verspreiden en door te geven via elk medium of bestandsformaat
    • het werk te bewerken - te remixen, te veranderen en afgeleide werken te maken
    • voor alle doeleinden, inclusief commerciële doeleinden.

    Meer informatie over de CC Naamsvermelding 3.0 Nederland licentie.

    Aanvullende informatie over dit lesmateriaal

    Van dit lesmateriaal is de volgende aanvullende informatie beschikbaar:

    Leerniveau
    HAVO 4; VWO 4; VWO 5;
    Leerinhoud en doelen
    Informatica;
    Eindgebruiker
    leerling/student
    Moeilijkheidsgraad
    gemiddeld
    Trefwoorden
    arrangeerbare, leerlijn, rearrangeerbare
  • Downloaden

    Het volledige arrangement is in de onderstaande formaten te downloaden.

    Metadata

    LTI

    Leeromgevingen die gebruik maken van LTI kunnen Wikiwijs arrangementen en toetsen afspelen en resultaten terugkoppelen. Hiervoor moet de leeromgeving wel bij Wikiwijs aangemeld zijn. Wil je gebruik maken van de LTI koppeling? Meld je aan via info@wikiwijs.nl met het verzoek om een LTI koppeling aan te gaan.

    Maak je al gebruik van LTI? Gebruik dan de onderstaande Launch URL’s.

    Arrangement

    IMSCC package

    Wil je de Launch URL’s niet los kopiëren, maar in één keer downloaden? Download dan de IMSCC package.

    Meer informatie voor ontwikkelaars

    Wikiwijs lesmateriaal kan worden gebruikt in een externe leeromgeving. Er kunnen koppelingen worden gemaakt en het lesmateriaal kan op verschillende manieren worden geëxporteerd. Meer informatie hierover kun je vinden op onze Developers Wiki.