4. Array’s Een array is een geïndexeerde variabele. Deze zin zal de nodig vragen oproepen, waarop enige uitleg van toepassing is. Met variabelen hebben we al kennis gemaakt. In een variabele kun je iets opslaan (een tekst of een getal). Een variabele gebruik je om iets te onthouden om dit later weer te gebruiken. Dit onthouden wordt in het computergeheugen gedaan. Een variabele is eigenlijk niets anders dan een verwijzing naar het computergeheugen waarin jij iets hebt opgeslagen. Voorbeeld: Int32 leeftijd; Leeftijd=18; if(leeftijd >= 20) { MessageBox.Show(“U bent meerderjarig“) } else { MessageBox.Show(“U bent minderjarig“) } In de eerste regel declareer je een variabele. Dat wil zeggen: je reserveert een stukje computergeheugen (32 bits) met de bedoeling om hierin een numerieke waarde (geheel getal) in op te slaan. Welk nog vrij stukje geheugen wordt gereserveerd wordt door de memorymanager van het besturingssysteem bepaald. Verder krijgt dit stukje geheugen een naam (een identifier), zodat het makkelijk te benaderen is om er iets in op te slaan om het later weer te gebruiken. In de tweede regel plaatsen we in het gereserveerde stukje geheugen een getal. In de booleanexpressie leeftijd >= 18 gebruik je de waarde van de variabele om hem te vergelijken met een vaste waarde (18). In een variabele wordt telkens 1 waarde (1 getal, 1 tekenreeks) opgeslagen. In een array kun je meer getallen en tekenreeksen opslaan. Een array kun je het beste vergelijken met een variabele die bestaat uit meer dan 1 stukjes geheugen. In figuur 4.1 zie je een schematische voorstelling van een variabele en een array. De variabele leeftijd shematisch: leeftijd De array leeftijden schematisch: leeftijden Figuur 4.1 20 20 16 33 11 Een variabele en een array schematisch weergegeven AO.NET_basis_hoofdstuk 4 Pagina 1 In figuur 4.1 zie je dat in de array met de identifier leeftijden 4 waarden zijn opgeslagen. De array bevat als het ware 4 variabelen onder één naam. We spreken hier van de elementen van de array. De array leeftijden bevat dus 4 elementen en elk element bevat een afzonderlijke waarde. De elementen kun je van elkaar onderscheiden met behulp van een index. In figuur 4.2 zie je hiervan een voorbeeld. leeftijden Figuur 4.2 20 16 33 11 leeftijden[0] leeftijden[1] leeftijden[2] leeftijden[3] De elementen van een array worden van elkaar onderscheiden met behulp van een index Let op: De index van een array is altijd een positief geheel getal (type int). Het eerste element van een array heeft altijd de index 0 . In leeropdracht 4.1 leer je hoe je een array kunt declareren en hoe je kunt werken met de waarden in een array. Leeropdracht 4.1 In deze leeropdracht leer je hoe je een array kunt vullen en hoe je gegevens in een array kunt weergeven. a. Maak een nieuwe applicatie en richt het formulier in zoals in figuur 4.3. Figuur 4.3 De naam van de textboxen zijn: tbxIndex en tbxNaam In deze applicatie maken we gebruik van een array met de naam arrNamen die 25 elementen bevat. De applicatie werkt als volgt: In de textbox tbxIndex moet een getal worden ingevuld (groter of gelijk aan nul en kleiner dan 25) In de textbox tbxNaam moet je een naam invullen. Druk je op de knop met de tekst Voer in dan wordt de naam op het juiste element in de array opgeslagen. Voer je alleen een getal in de textbox tbxIndex in, dan krijg je de naam te zien die bij deze index in de array behoort. Als je een andere tekst in de textbox tbxIndex invoert dan een getal uit de verzameling (0, 1, 2, … ,23, 24), dan moet er een foutmelding komen. AO.NET_basis_hoofdstuk 4 Pagina 2 We gaan eerst de array declareren. In figuur 4.4 zie je hoe dit in z’n werk gaat: public partial class Form1 : Form { string[] arrNamen = new string[25]; int index; public Form1() { InitializeComponent(); } Figuur 4.4 Je ziet dat deze declaratie anders is dan wat je gewend bent. Hier wordt het keyword new gebruikt. Deze wijze van declareren zal je vaker tegenkomen. Waarom dit zo moet wordt in deze cursus niet uitgelegd. b. Declareer de array arrNamen en de variabele index zoals in figuur 4.4 is aangegeven. Deze declaratie moet wel op de juiste plek staan (direct na de regels: public partial class Form1 : Form { Deze variabelen kun je nu bij elk event gebruiken. We noemen dit globale variabelen. c. Schrijf de code voor de knop met de tekst Voer in. In figuur 4.5 zie je het PSD voor dit stukje code. Geef de variabele index de waarde die je in de tekstbox tbxIndex hebt ingevoerd (let op de conversie) Zet de waarde die je in de tekstbox tbxNaam hebt ingevoerd in het element arrNamen[index] . Figuur 4.5 d. Breid de applicatie verder uit door ook de code voor de knop met de tekst Voer uit te schrijven. AO.NET_basis_hoofdstuk 4 Pagina 3 De volgende stap is: vang een foute invoer af. Voorbeelden van een foute invoer zijn: Een index als 34 invullen. Deze index bestaat niet in de array. Bij het invoeren van de naam in dit element ontstaat de volgende fout: Index was outside the bounds of the array. Een index als abc invullen. Deze index kan niet van een string naar een int worden geconverteerd. Bij het invoeren van de naam in dit element ontstaat de volgende fout: Input string was not in a correct format. Je kunt met het statement try-catch een fout afvangen die ontstaat in een blok coderegels. In figuur 4.6 zie je hoe het statement try-catch werkt. try { Coderegel 1 Coderegel 2 … … } catch { MessageBox.Show("U heeft een verkeerde indexwaarde ingevoerd"); } Figuur 4.6 Tussen de accolades onder try staan de coderegels waarin een fout zou kunnen optreden, bijvoorbeeld een index die te groot is, of een tekenreeks die niet in een int kan worden geconverteerd. Tussen de accolades onder catch staan de coderegels die moeten worden uitgevoerd als er in het try blok een fout optreedt. In het codevoorbeeld verschijnt dan een een messagebox met een tekst. e. Maak de applicatie af zodat fouten die kunnen optreden, worden afgevangen in een trycatch statement. Einde leeropdracht 4.1 In de volgende opdracht moet je alle elementen in een array weergeven. Hiervoor gebruiken we het statement foreach. Dit statement werkt als volgt: foreach(string naam in arrNamen) { listBoxNaam.Items.Add(naam); } Uitleg: De variabele naam moet van hetzelfde type zijn als de gegevens in de array arrNamen. Het statement foreach leest één voor één de elementen in de array en zet de waarde van zo’n element in de variabele naam. Tussen de accolades staat dan wat je met deze waarde moet doen. In dit geval voeg je deze waarde toe als regel (item) in een listbox. AO.NET_basis_hoofdstuk 4 Pagina 4 Opdracht 4.2 In figuur 4.7 zie je de applicatie van leeropdracht 4.1 met een uitbreiding van een knop en een listbox. Als je op de knop met de tekst Alle namen drukt, dan zie je in de listbox de indexen en namen van iedereen in de array. Figuur 4.7 a. Maak de applicatie af zoals hiervoor is beschreven. Je ziet dat ook de elementen te zien zijn waarin geen naam staat. b. Maak de applicatie af zodat alleen de elementen waar een naam in staat in de listbox wordt weergegeven. Einde opdracht 4.2 AO.NET_basis_hoofdstuk 4 Pagina 5 Meer opdrachten over array’s Opdracht 4.3 Maak een applicatie waar je 10 getallen in een array kunt invoeren (index 0 tm 9). Na een druk op een knop moet het gemiddelde van die getallen worden eergegeven. Opdracht 4.4 Maak een applicatie waar mee je kunt zoeken op een naam in een array met namen. Nadat je op de zoekknop hebt gedrukt, krijg je de index en de naam behorende met de zoekopdracht. Opdracht 4.5 Maak een applicatie waarmee je twee getallen in een array met 10 elementen kunt wisselen. Je moet hier de indexen van de te wisselen elementen opgeven, waarna met een druk op een knop de getallen in die elementen worden verwisseld. Opdracht 4.6 Maak een applicatie waarmee je een array met 10 getallen kunt sorteren. Gebruik hiervoor een programma waarvan je hieronder het PSD ziet. In dit PSD moet je de code van het wisselprogramma uit opdracht 4.5 gebruiken. In deze code is arrLijst de array met getallen die gesorteerd moet worden AO.NET_basis_hoofdstuk 4 Pagina 6