4. Array`s Een array is een geïndexeerde

advertisement
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
Download