TentamenInleidingProgrammeren in Java Vakcode:2lI0L7 Datum: 4 februari2005 Tijd: 13.30- 17.00uur
Algemeen: Dit tentamenbestaatuit 4 opgaven, waarvoor in totaal 100 punten verdiend kunnen worden. De eerste 10 punten zijn gratis. .
Blj dit tentamenmag uitsluitend een handbeschrevenvel A4 als materiaal gebruikt worden.
Opgave í (6 punten)
Geef bij elk van de volgende uitspraken aan of ze welof niet wala.zijn: 1. Als a een booleanvariabeleis, dan leverende uitdrukkingen " !a" en "a != false" altijd dezelfde waarde op. 2. Een lokale variabele van een methode kan ook buiten die methode gebruikt worden. 3. Een public ffual attribuut kan buiten de klasse waarin het gedeclareerdis geen nieuwe waardetoegewezenkrijgen, maar binnen de klasse wel. 4. Een objectmethodekan geen gebruik maken van klassenattributen. 5. Een klassenmethodekan geen gebruik maken van objectattributen. 6- Als een (formele) parametervan een methode binnen de body een nieuwe waarde toegewezen krijgt, verandert de overeenkomstige(actuele) parameterniet.
Opgave2 (45 punten) Eind april wordt voor de 33" keer de Batavierenracegehouden.De afstand van deze estafetteloopis ruim i75 kilometer en is onderverdeeld in 25 etappes. Een eenvoudig (deel)model van deze estafetteis gegevenonderstaandklassendiagram. Etappe
+int
AANTALETAPPES = 25
+int
RECORDTïJD= 10000
-int
etappenummer
-double -inl-
etapPelengte
rannrriTi e v v s
\ 4 +
irl
e
double
nr,
+Etappe(int
+int
+ J
get,Etappenr
+void
lengte)
() int
setRecordTijd(
nieuwetij
d)
Loper
-String
naam
-Team team -Etappe -int
etappe
loopLijd
+Loper(String
getEtappe
+Etappe +inL
nm, Team tm,
getloopTijd(
ELappe et)
() )
Team
-String
naamTeam
-Loper [ ] deelnemers
+Team(String
+boolean +void
nm)
isCompleet ( )
voegloperToe(Loper
loper)
De constructor van de klasse Etappe zorgt er voor dat de attributen etappenummer en etappelengte van een beginwaarde woraen voórzien. De recordtijd van de nieuwe instantie is aanvankelijkeI 0000 (de constanteREcoRDTï JD). geeft het nummer van de etappeen de methode setRecordTijd De methodegetEtappenr past de recordti3duun ut* een lJper de etappesneller heeft afgelegd dan de huidige recordtijd. Geef de code van de klasseEtappe.
2a (10 pnt)
De constructor van de klasse Loper zorgt naast initialisatie van de attributen er ook voor dat deze loper aan het betreffende team wordt toegevoegd (zie de klasse Team). De methode getEtappe levert de etappevan deze loper op en de áethoáe get.LoopTi j d geeft de-looptijd van deze_loper' j d. De looptijd is^initieelnul enÏan worden gesetmet de later te maken methodesetloopTi Geef de code van de klasseLoper .
2b (8 pnt)
De klasseLoper is nog voorzien van de volgendemethoden: *levert
(in de loopsnelheid *nog geen tijd bekend is.
public
double { }
op van deze loper
of
0 als
er
()
van deze loper wordt gezet en eventueel van de gelopen etappe aangepast' de geloPen tijd lt.ijd
*de gelopen *recordtijd *@param
getlooPSnelheid
km/u)
tijd
wordt
de
x /
public
setloopTijd(in
void {
2c (6 pnt)
ltijd)
i Schrijf de implementatie van bovenstaandemethoden.
Een team van lopers heeft een naÍrm en bestaatuit zoveel lopers als er etappeszijn. De klasseTeam heeft dus een naam en een aÍray van lopers als attribuut. In de constructor worden deze attributen op de juiste waardegeinitialiseerd. De methodeisCompleet onderzoektof er voor elke etappeeen loper is. zet, indien het team nog niet compleetis, de loper op de juiste plaats De methodevoegloperToe in de array deelnemers.
2d (3pnt)
Geef de implementatievan de contructorTeam.
2e (8 pnt)
Geef de specificatieen implementatievan de methodeisCompleet.
2f (10pnt)
Geef de specificatieen implementatievan de methodevoegloperlfoe.
-
Opgave3 (12Punten) Beschouwnu het volgendeprograÍnmafragment: L
Team
2
Etappe
3
Etappe
4
EtapPe
Leaml= new Team('Teama') ; = n e w E t a P P e ( 1 ", 3 - 2 ) ; etleL2 = new EtaPPe(2,7 .0) i = new EtaPPe (3 , 1-1-9) ; et3
6
Loper
henny
7
Loper
karel
r
teaml-' et1) ; = new Loper('Henny'' = new Loper('Karel',teaml-,et3);
a ;
teaml.voegloPerToe(henny) (karel teaml- . voegloperToe
9 l-0
) ;
1-1 t2
henny. setlooptTijd(708)
;
l-3
karel.
;
setÏ,oopTijd(2503)
3a (4 pnt)
Teken het geheugenmodel(objectdiagram)na regel 4'
3b (3 pnt)
na de regels6"10' Geef de aanpassing/uitbreiding
3c (1 pnt)
na de regels 12 en 13. Geef de aanpassingluitbreiding
van de :d (4 pnq Wat is na afloop van bovenstaand prografirmafragment de waarde/resultaat uitgevoerd onderstaandeuitdrukkingen. Indien eeï uitdrukking niet correct kan worden geef dan aan wat de fout is. 20 )1 22 23 24
hennY.getnaam0 == 'HennY'; hennrr. team == teaml-; et2 == karel.getEtaPPe0; karel.serloopTijd(et2.setRecordTijd(2500) et3. etaPPelengte = 3.3;
);
Apgave 4 (27 punten) tweeklassen, Gegevenzijnonderstaande BestandGegevens.java 1
pubLíc
2 1
claes
Gegevens
{
/ /Lengte
i
6 7 8 9
array
public Gegevenso = nêw GegevenlGegevens.aRL];] { this"info () public void initGegevens
tl 12 13
void grapjeo (ffi; tel< Gegevens.ARL;te1=te1+2) {for this. info Ite]-l . initNaam( ) ; ] public
t4 public
15 16
//nog
woord) { /"ffiffi*m
int ffi-W(strins m e e r methoden die
operatie
"/}
op de data
mogelijk
maken
op de data
mogelijk
maken
n public 18 19 //nog 2 0 )
ffioiz*ffi*ui
inÈ m e e r methoden
operatie
die
Bestand Gegeven.iava 2l 22 public clasg Gegeven
25 26 27 28 29 30 31 32
pubLic
Gegeveno
{}; public
void
initNaamo String( {this.naam=Ílew
"");}
{return
getNaamo String this.naam};
public
void
public { return
int getVolgnummer ttris .volgnummer}
public
JJ
34 35 36 37 38 39 40 4l
setNaam {this.naam=naam} ;
(String
naam)
() ;
public void setVolgnummer tint . volgnummer=nummer this ) ; ) i
ffi)
De grijzemarkeringis ten behoevevan opgave4c en heeÍtverdergeenbetekenis.
Beschouwnu hetvolgendeprogrammafragment: private
Gegevens inf;
, // s i t u a t i e
A
inf=new
Gegevens O ;
, // s i t u a t i e
e
inf. iniLGegevens O ;
//situatie
C
; - c ^ - ^ * l ^ I r r ! , u ! q } / J s \ r ,
//siLuatie
D
/ \
.
4a (5 pnt)
(objectdiagram). geheugenmodel GeeÍde bij de situatieA, B, C en D behorende Duidelijkmoet zijn of een variabeleeen waardeheeft,een NULL reÍerentie(x) heeÍt of is (?). ongedeÍinieerd
fn klasse Gegevenwordt in de methoden seËrvaam en setvofgnuÍrnner het sleutelwoordthis gebruikt.
4b (2 pnt)
Vertelwat dit betekenten leg uit wat het eÍfectvan deze methodenzou ziin als de beide this's daarnietzoudenstaan.
begrippen. veelgebruikte de volgende Gegeven
Y .
h .l_ . l .
Klasse attribuut Object aLtribuut Lokale variabele Formel-e (paramet,er) (parameter) Actuele Terugkeerwaarde decLaraLie Variabele Object creatie (type) PrÍmitief (tlpe) Ref erenLie
4c (10 pnt)
k. 'l
Methode heading m . Methode body Klasse van een klasse o , Instantie Obj ect . q . ConsLructor van" ( a s s o c i a t i e r , "maakt gebruik " j-s een uitbreiding van" (overerving) t. ToekenningsopdrachL
)
Vul op de plaatsen mel <
> een begrip uit de bovenstaande lijst in (totaal12 begrippen).
fn de klasse Gegevenwordt in regel23 een << begrip/>> van het << begrip2>> (type) gedeclareerd.ln regel24 wordt een declaratiegecombineerdmet << begrip3>> aan de waarde 0' De kfasse Gegevens heeÍt een << begrip4>> relatie met de klasse Gegeveni dit is te zien in regel 5. Hier wordthel << begrip5>> inf o van het << begripó>> (type) gedeclareerd. fn regef 10 vindt de << begrip7>> van de elementenvan het array plaats. De << begrip8>> Ëet is van het << begrip9>> (type) en wordt ook wel de lopende'oÍ indexvariabele genoemd. ln regel 4 wordt het << begrip I0>> ARLgedeclareerd.Omdat ARL binnen zijn eigen klasse gebruikt wordtzou in regelI ook Ian-cI of [this.ARL]
mogenstaan.
Neem de methode die begint in regel 40 in beschouwing, nunrmerin regel 40 is een << begrip11>> en is een onderdeelvan << begripI2>>
6
meteen return of break. nietwordenafgebroken Bij de opgavend, e en f magde herhalingsopdracht is Bij opgavee en Í magje aannemendat de methodeinitcevens uitgevoerd 4d(4pnt)
uit rnjtGegevens (regel9) naar een while'statement. het Íor-statement Transformeer je van het array,geef in deze schetsduidelijkde rol een schets met ontwerp Ondersteun genoemd) aan,beschrijÍde betekenisvan dezevariabele (ook wel lopendevariabele van tel en stopconditie. en motiveerde startwaarde
De methode tefNgLLstrings 4e (3 pnt)
levert het aantal keren dat naam in het array de waarde NULL heeft'
int telNUr,r,strings O (regel 18). Je heb de lmplementeerde methode public keuze om deze opgave op te lossen met een for-statementof een while-statement.Motiveer jouw keuze (geen gebruik van relurn of break!).
De methodê zoekWoord levert het volgnummer op van de laatste keer dat woord Lhis.:.nfo VooÍkomt,dit gerekendvanaf index0.
4f (3pnt)
in het array
de methodepublic int zoekWoord(SLring woord) . (regel15) lmplementeer Je heb de keuze om deze opgave op te lossen met een for-statementof een whilestatement.Motiveerjouw keuze(geengebruikvan returnof break!). kaner aangevenwordendal woord nietvoorkomt? Metwelketerugkeerwaarde(n)
Uitwerkingen tentamen Inleiding Programmeren in Java 4 februari 2005 Opgave 1 1. Niet waar. Als a waar is, levert “!a” nietwaar op, maar “a != false” levert waar op . 2. Niet waar. Een lokale variabele van een methode is alleen beschikbaar binnen de methode. 3. Waar. Er kan 1 keer een waarde toegekend worden aan een final attribuut, dat kan bij het declareren van het attribuut of in de constructor van de klasse (1 keer!). Dus alleen binnen de klasse, en slechts 1 keer. 4. Nietwaar. Iedereen kan gebruik maken van klassenattributen (als ze public zijn), dus ook de objectmethoden van die klasse. 5. Waar Een klassemethode kan geen gebruik maken van de objectattributen van een object van die klasse, omdat de methode aangeroepen kan worden voordat er een object aangemaakt is. Wel kan de methode een object aanmaken of meekrijgen als parameter en de objectattributen van dat object benaderen (als ze public zijn). 6. Waar De formele parameter is een kopie van de actuele parameter. In het geval van een primitieve dus een kopie van de waarde, in het geval van een object een kopie van de verwijzing. Wanneer dus de waarde van de formele parameter zelf veranderd wordt, wordt de waarde van de kopie veranderd: de waarde van de primitieve wordt veranderd of de verwijzing naar het object. Wordt echter iets veranderd aan het object waar de formele parameter naar verwijst, is dit een verandering aan het object waar ook de actuele parameter heen wijst. Opgave 2 a. /** * De klasse etappe beschrijft een etappe van de Batavierenrace * Het etappenummer, de etappelengte en de recordtijd wordt bijgehouden * @author Albert Molderink * @version 1.0 */ public class Etappe{ public static final int AANTALETAPPES = 25; public static final int RECORDTIJD = 10000; private int etappenummer; private double etappelengte; private int recordTijd; /** * Constructor voor de klasse Etappe * Het etappenummer en de lengte worden gezet op de waarden van de parameters, * als de waarde van de parameters geldig zijn. De recordtijd wordt op een * waarde van 10000 geinitieerd (RECORDTIJD) * @param nr het nummer van de etappe, moet liggen tussen 1 en AANTALETAPPES * @param lengte de lengte van de etappe, moet groter dan 0 zijn */ public Etappe(int nr, double lengte){ if(nr<=Etappe.AANTALETAPPES){ //klopt het etappenummer wel? this.etappenummer=nr;
Uitwerkingen tentamen Inleiding Programmeren in Java 4 februari 2005 }else{ etappenummer=-1; } if(lengte>0){ this.etappelengte=lengte; }else{ this.etappelengte=0; } this.recordTijd = Etappe.RECORDTIJD; } /** * Geeft het nummer van de etappe * @return het nummer van de etappe */ public int getEtappenr(){ return etappenummer; } /** * Zet de recordtijd op de waarde van de parameter, als dit tenminste echt een * nieuwe recordtijd is, anders blijft de oude waarde staan * @param nieuwetijd de nieuwe recordtijd, moet groter dan 0 zijn */ public void setRecordTijd(int nieuwetijd){ if(nieuwetijd
b. /** * Klasse die een loper van de batavierenrace beschrijft * @author Albert Molderink * @version 1.0 */ public class Loper{ private String naam; private Team team; private Etappe etappe; private int looptijd; /** * Constructor voor de klasse Loper. De naam, het team en de etappe worden * gezet op de waarden van de parameters, de looptijd wordt op 0 gezet. Verder * wordt de loper toegevoegd aan het team. * @param nm de naam van de speler * @param tm het team waarin de loper loopt * @param et de etappe die de loper loopt */ public Loper(String nm, Team tm, Etappe et){ this.naam=nm; this.team=tm; this.etappe=et; this.looptijd=0; team.voegLoperToe(this); //this geeft het huidige object }
Uitwerkingen tentamen Inleiding Programmeren in Java 4 februari 2005 /** * Geeft de etappe die de loper loopt * @return de etappe waarin de loper loopt */ public Etappe getEtappe(){ return this.etappe; } /** * Geeft de tijd die de loper nodig had voor de etappe * @return de tijd die de loper nodig had de etappe te lopen */ public int getLoopTijd(){ return this.looptijd; } }
c. /** * Geeft de gemiddelde snelheid die de loper gelopen heeft tijdens de etappe * @return de gemiddelde snelheid tijdens de etappe */ public double getLoopSnelheid(){ if(this.looptijd==0){ return 0; }else{ double afstand = et.getEtappeLengte(); //we gaan er vanuit dat deze //methode bestaat return this.looptijd/afstand; } } /** * Zet de tijd die de loper nodig had voor de etappe, zo nodig wordt ook de * recordtijd van de etappe aangepast * @param ltijd de tijd die de loper nodig had voor de etappe, moet groter dan 0 * zijn */ public void setLoopTijd(int ltijd){ this.looptijd=ltijd; et.setRecordTijd(ltijd); //deze methode controleert of het wel echt een //recordtijd is }
d. /** * Constructor voor de klasse Team, het aantal lopers wordt geinitieerd op 0 * @param nm de naam van het team */ public Team(String nm){ this.naam=nm; this.lopers = new Loper[Etappe.AANTALETAPPES]; this.aantalLopers=0; }
Uitwerkingen tentamen Inleiding Programmeren in Java 4 februari 2005 e. /** * Methode die controleert of er even veel lopers zijn bij een team als er etappes * zijn * @return een boolean of er evenveel lopers als etappes zijn */ public boolean isCompleet(){ return (this.aantalLopers==Etappe.AANTALETAPPES); }
f. /** * Voeg een loper toe aan het team * @param lp de loper die toegevoegd moet worden aan het team */ public void voegLoperToe(Loper lp){ if(this.aantalLopers<Etappe.AANTALETAPPES){ this.lopers[aantalLopers]=lp; this.aantalLopers++; } }
Opgave 3 (klassenattributen en methoden mogen onderstreept aangegeven worden in het object diagram, een array is aangegeven als een object met schuingedrukt de lengte) a
team1: Team naamTeam : deelnemers : aantalLopers : 0
naamTeam: String “Teama”
deelnemers : Array lengte 25
et1 : Etappe AANTALETAPPES : 25 RECORDTIJD : 10000 etappenummer : 1 etappelengte : 3.2 recordTijd : 10000
et2 : Etappe AANTALETAPPES : 25 RECORDTIJD : 10000 etappenummer : 2 tappelengte : 7.0 recordTijd : 10000
et3 : Etappe AANTALETAPPES : 25 RECORDTIJD : 10000 etappenummer : 3 etappelengte : 11.9 recordTijd : 10000
Uitwerkingen tentamen Inleiding Programmeren in Java 4 februari 2005 b Er worden twee lopers aangemaakt en toegevoegd aan de array. Alleen de array en de lopers zijn getekend. We gaan er even vanuit dat de lopers maar een keer toegevoegd worden (niet en in de constructor zoals in de vorige opdracht en regel 9-10). Wil je dit wel meenemen, komen er twee pijlen vanuit de array naar ieder object. team1: Team naamTeam : deelnemers : aantalLopers : 2
naamTeam: String “Teama”
deelnemers : Array lengte 25
naam: String “Henny”
henny : Loper naam : team : etappe : looptijd : 0
et1 : Etappe AANTALETAPPES : 25 RECORDTIJD : 10000 etappenummer : 1 etappelengte : 3.2 recordTijd : 10000
karel : Loper naam : team : etappe : looptijd : 0
et2 : Etappe AANTALETAPPES : 25 RECORDTIJD : 10000 etappenummer : 2 tappelengte : 7.0 recordTijd : 10000
naam : String “Karel”
et3 : Etappe AANTALETAPPES : 25 RECORDTIJD : 10000 etappenummer : 3 etappelengte : 11.9 recordTijd : 10000
c De looptijd van de lopers wordt aangepast en daarom ook de recordtijd van de etappes als dat nodig is. team1: Team naamTeam : deelnemers : aantalLopers : 2
naamTeam: String “Teama”
deelnemers : Array lengte 25
naam: String “Henny”
henny : Loper naam : team : etappe : looptijd : 708
et1 : Etappe AANTALETAPPES : 25 RECORDTIJD : 10000 etappenummer : 1 etappelengte : 3.2 recordTijd : 708
karel : Loper naam : team : etappe : looptijd : 2503
et2 : Etappe AANTALETAPPES : 25 RECORDTIJD : 10000 etappenummer : 2 tappelengte : 7.0 recordTijd : 10000
naam : String “Karel”
et3 : Etappe AANTALETAPPES : 25 RECORDTIJD : 10000 etappenummer : 3 etappelengte : 11.9 recordTijd : 2503
Uitwerkingen tentamen Inleiding Programmeren in Java 4 februari 2005 d 20. NIETWAAR: twee objecten kunnen op deze manier niet vergeleken worden, op deze manier worden twee verwijzingen vergeleken. 21. FOUTMELDING: het attribuut team is private, dus kan niet van buiten het object benadert worden 22. NIETWAAR: ten eerste worden hier ook weer twee verwijzingen vergeleken, maar karel loopt echter etappe 3. De vergelijking et3==karel.getEtappe() vergelijkt ook twee verwijzingen, maar dat zijn twee verwijzingen naar hetzelfde object, dus dat zou WAAR opleveren 23. FOUTMELDING: de methode setLoopTijd wordt aangeroepen op het object karel, dat is prima. De methode setRecordTijd aanroepen op et2 gaat ook prima, ook een methode aanroep als parameter mee geven gaat goed. De returnwaarde van de binnenste methode wordt dan meegegeven als parameter aan de buitenste methode. Maar de methode setLoopTijd heeft een int als parameter, de methode setRecordTijd heeft als returntype void. 24. FOUTMELDING: etappelengte is een private attribuut Opgave 4 a situatie A: er wordt alleen ruimte voor de verwijzing naar het object gemaakt. situatie B: er wordt ook geheugen gereserveerd voor het object: inf : Gegevens ARL : 6 info :
info : Array lengte 6
situatie C: er zijn 6 objecten van de klasse Gegeven aangemaakt en toegevoegd aan de array (er zijn er 2 getekend). Volgnummer staat op 0 omdat dit de beginwaarde is, de string naam verwijst nog niet naar een object, alleen de verwijzing is nog maar aangemaakt, nog geen object. inf : Gegevens ARL : 6 info :
info : Array lengte 6
gegeven1 : Gegeven naam : x volgnummer : 0 gegeven2 : Gegeven naam : x volgnummer : 0
situatie D: de object in de array info op de plaasten 0, 2 en 4 worden aangepast (tel=tel+2). Bij deze object wordt de String naam geinitieerd op “” (er zijn weer twee object getekend). inf : Gegevens ARL : 6 info :
info : Array lengte 6
naam : String
“”
gegeven1 : Gegeven naam : volgnummer : 0 gegeven2 : Gegeven naam : x volgnummer : 0
Uitwerkingen tentamen Inleiding Programmeren in Java 4 februari 2005
b Bij setNaam geeft this.naam aan dat de waarde van het objectattribuut verandert moet worden. Omdat er in de methode een variabele “naam” gedeclareerd wordt, zou zonder this die variabele bedoelt worden. Het zou dus fout gaan zonder this. Bij setVolgnummer geeft this opnieuw aan dat het objectattribuut bedoelt wordt, maar er wordt in de methode geen variabele “volgnummer” gedeclareerd, dus ook zonder this is het duidelijk dat het attribuut bedoelt wordt. Deze methode zou hetzelfde werken zonder this. c In de klasse Gegeven wordt in regel 23 een Object attribuut van het Referentie (type) gedeclareerd. In regel 24 wordt een declaratie gecombineerd met Toekenningsopdracht aan de waarde 0. De klasse Gegevens heet een “maakt gebruik van” (associatie) relatie met de klasse Gegeven; dit is te zien in regel 5. Hier wordt het Object attribuut van het Array (type) gedeclareerd. In regel 10 vind de Object creatie van de elementen van het array plaats. De lokale variabele tel is van het primitief (type) en wordt ook wel de lopende- of indexvariabele genoemd. In regel 4 wordt het Klasse attribuut ARL gedeclareerd. Omdat ARL binnen zijn eigen klasse gebruikt wordt zou in regel 8 ook [ARL] of [this.ARL] mogen staan. Neem de methode die begint in regel 40 in beschouwing, nummer in regel 40 is een Formele parameter en is een onderdeel van methode heading. d De tel doorloopt iedere index van de array, hij loopt door de array, vandaar lopende variabele. De startwaarde is 0: de waarde van de eerste index. De stopwaarde is het einde van de array, de laatste index is de lengte van de array -1. Dus als tel de lengte van de array bereikt, moet hij stoppen. tel
info
...
int tel=0; while(tel
e Ik heb gekozen voor een for-lus omdat ik precies weet hoe vaak het uitgevoerd moet worden, de hele array moet doorgelopen worden. /** * Telt het aantal keren dat er een object van het type Gegeven in de array zit * waarvan de naam nog niet geinitialiseerd is (NULL) * @return het aantal keren dat er een NULL string voorkomt */ public int telNULLstrings(){ int teller=0; for(int tel=0;tel
Uitwerkingen tentamen Inleiding Programmeren in Java 4 februari 2005 } } return teller; }
f Ik heb een for-lus gebruikt omdat ik precies weet hoe vaak het uitgevoerd moet worden, namelijk net zo vaak als de array lang is. Als terugkeerwaarde als hij niet gevonden is heb ik -1 gekozen, dat is een ongeldige index van een array en geeft zo aan dat hij er niet in voorkomt. /** * Deze methode zoek het laatste voorkomen van woord in de verzameling van gegevens * @param woord het woord dat je zoek * @return de laatste index waar het woord voorkomt, anders -1 */ public int zoekWoord(String woord){ int teller=-1; String temp; for(int tel=0;tel
Een tweede voorbeeld: met een while lus. Deze implementatie is optimaler dan de vorige: hij begint aan de achterkant van de array te zoeken totdat hij “woord” tegenkomt. Als “woord” voorkomt, is deze eerder klaar dan de methode die aan de voorkant begint. De terugkeerwaarde is opnieuw -1 als hij niet gevonden wordt. MERK OP: zie je dat de javadoc voor beide implementatie's gelijk is? Dus dat een gebruiker van de klasse geen verschil tussen de implementatie's ziet, omdat hij alleen de javadoc bekijkt. En dat het voor de gebruiker ook niet uitmaakt, als er maar het goede resultaat uitkomt. /** * Deze methode zoek het laatste voorkomen van woord in de verzameling van gegevens * @param woord het woord dat je zoek * @return de laatste index waar het woord voorkomt, anders -1 */ public int zoekWoord(String woord){ bool gevonden = false; int teller = Gegevens.ARL; while( teller > 0 && !gevonden){ teller--; //eerst verlagen! gevonden=this.info[teller].getNaam().equals(woord); //snap je dit? } if(gevonden){ return teller; }else{ return -1; } }