Deze oefening verwerkt informatie over de straten in Gent. Voeg in een nieuw project met naam
Labo01 de klasse
StratenGent toe. Deze klasse zal alle straten onthouden en methodes ter beschikking stellen om daarna informatie op te vragen. Volg onderstaande instructies:
- De klasse "onthoudt" alle straten (dit zijn strings) in een array. Voorzie 5000 elementen in de array.
- Voeg een constructor toe, met als enige parameter de bestandsnaam die moet worden verwerkt. In de constructor lees je alle lijnen in van het opgegeven bestand en onthoud je die in de array. Onthoud ook hoeveel elementen er ingevuld werden.
- Voeg een getter getAantal() toe. Deze geeft het aantal straten terug.
In het hoofdprogramma van het project initialiseer je een object van de klasse
StratenGent. Gebruik daarbij het bestand
stratenGent.txt. Schrijf in het hoofdprogramma het totaal aantal straten (1105).
Volgende methodes worden toegevoegd in de klasse
StratenGent.
- Schrijf de methode kiesStraat() die willekeurig één straat 'kiest' en teruggeeft.
- Schrijf de methode kiesStraten(aantal) die het opgegeven aantal straten 'kiest' en teruggeeft als array.
Er mogen dubbels aanwezig zijn in het resultaat.
Zorg dat de straten gesorteerd zijn in de array die je teruggeeft - gebruik een methode van de klasse Arrays.
In het hoofdprogramma controleer je of beide methodes correct werken.
- Schrijf in de klasse StratenGent de methode kiesVerschillendeStraten(aantal) die het opgegeven aantal straten 'kiest', maar wel zo dat altijd verschillende straten gekozen worden.
Je mag ervan uitgaan dat er niet meer straten gevraagd worden dan er beschikbaar zijn.
Tip: het is hier niet opportuun om de vorige methode aan te roepen, dat zou de oplossing nodeloos ingewikkeld maken.
Controleer deze methode ook in het hoofdprogramma.
Merk op (noodzakelijk voor Dodona-testen): In de oplossing die je nu hebt vertrouw je erop dat er niet meer dan 5000 straten zijn. Dit wordt nu aangepast:
- Voorzie maar 100 elementen in de array en kijk waar het fout gaat.
- Voeg een voorwaarde toe in de while-lus zodat je geen
IndexOutOfBoundsException
meer krijgt.
Uiteraard zijn nu enkel de eerste 100 straten ingelezen.
Om in te dienen op Dodona wijzig je de dimensie van de array terug naar
5000.
Tot slot: De array is meestal te groot - wat is de inhoud van elementen die niet ingevuld werden met een straatnaam?