Arrays

Picture1

  • Download hier de Powerpoint presentatie
  • Denk eraan: dit is herhaling en concretisering. De uitleg over het concept arrays kan je hier terugvinden.
  • Een variabele is een stukje in het geheugen van je computer met een naam.
  • Een array is een groep van dezelfde soort variabelen.

Soms is het niet voldoende om één waarde in een variabele op te slaan. Denk bijvoorbeeld aan een lijst van bowling scores. Het zou een erg lange lijst worden als je met 3 mensen, elk 10 beurten, telkens een nieuwe variabele moet maken.

 

Voor één persoon wordt dit al:

scoreTomSpel1 = 4;

scoreTomSpel2 = 5;

scoreTomSpel3 = 8;

...

Het is gemakkelijker om 1 lijst te hebben die “scoreTom” heet, en die de waarden 4,5,8,… bevat. Op die manier zouden we voor 4 spelers, slechts 4 lijsten hebben. Dat kan…enter arrays!

Een Array aanmaken (declareren)

Een array heeft net zoals een “gewonevariabele een type en een naam. Aangezien we voor mijn bowlingscores gehele getallen zullen opslaan wordt dat dus:

 int[] scoreTom;

We herkennen de array meteen aan zijn vierkante haken (zie: programming principles).  Nu weet de computer dat we een array nodig hebben, maar nog niet hoeveel onderverdelingen die array moet hebben.

Een array onderverdelen

Om aan te geven hoeveel onderverdelingen je array moet hebben, roep je de functienew” aan, met daarachter het type en het aantal onderverdelingen. Je maakt eigenlijk een “nieuwe onderverdeling” aan, en die wijs je toe aan je array:

 scoreTom = new int[10];

Het getal tussen die haken geeft aan hoe groot onze array is. In dit geval heb ik voor 10 gekozen, omdat er 10 rondes zijn in een bowling spel.

Een array vullen

Onze array bestaat nu wel, een doosje met 10 onderverdelingen, maar er zit nog niets in. Om een waarde in een array op te slaan, moet je expliciet aangeven in welk vakje deze dat terecht moet komen.  Dit doen we aan de hand van de index.

Picture2

Belangrijk om te onthouden is dat een computer begint te tellen vanaf 0 ! Het eerste vakje van onze array spreken we dan ook aan met:

scoreTom[0] = 4;

Even een overzicht: hier de volledige code om een array aan te maken (declareren) en te vullen met data (initiëren):

int[] scoreTom;

void setup(){
size(500,500);

scoreTom = new int[10];
scoreTom[0] = 4;
scoreTom[1] = 5;
scoreTom[2] = 8;
scoreTom[3] = 7;
scoreTom[4] = 5;
scoreTom[5] = 2;
scoreTom[6] = 8;
scoreTom[7] = 4;
scoreTom[8] = 8;
scoreTom[9] = 3;
}

Voor het ophalen van bepaalde informatie uit de array, roepen we de naam van de array aan, en geven we aan de hand van de index aan uit welk vakje we de data willen ophalen. Als ik bijvoorbeeld mijn score uit het 5de spelletje wil weten, vraag ik die op door:

 scoreTom[4];

Declareren, de grootte aangeven én initiëren kan je ook in 1 keer doen. Bij een array ziet dat er zo uit:

 scoreTom[] = {4,5,8,7,5,2,8,4,8,3};

Op deze manier weet Processing automatisch hoe groot je array is, aan de hand van de inhoud die je er hebt in gestopt.

Arrays en loops

Array data opvragen door middel van een loop

arrays en loops zijn onlosmakelijk met elkaar verbonden. Stel dat ik elke score uit mijn bowling spel wil opvragen. Dat kan ik door :

println(scoreTom[1]);
println(scoreTom[2]);
println(scoreTom[3]);
println(scoreTom[4]);
println(scoreTom[5]);
println(scoreTom[6]);
println(scoreTom[7]);
println(scoreTom[8]);
println(scoreTom[9]);

Maar het is veel gemakkelijker om een loop te gebruiken. Weet je nog waaruit een loopt bestond ?

  • start : bij 0
  • stap : ik wil elke score, dus stapjes van 1
  • stop : op het einde van de array, dus 10

Dat maakt mijn loop:

for(int i=0; i<10; i=i+1){

     println(scoreTom[i]);

}

Op deze manier gaat de loop door al de vakjes van de array, en vraagt de waarde erin op.

Soms weet je niet hoe lang een array is, of veranderd de lengte ervan tijdens je programma. Dan is het natuurlijk onmogelijk om met een hardcoded getal aan te geven wanneer je loop moet stoppen. Gelukkig kunnen we ten alle tijden de lengte van een array opvragen door:

 naamVanDeArray.length

of in ons geval wordt de loop dan:

for(int i=0; i<scoreTom.length; i=i+1){

     println(scoreTom[i]);

}

Array data vullen door middel van een loop

je kan niet alleen data opvragen door middel van een loop, maar we kunnen een array er ook mee vullen of aanpassen. Stel bijvoorbeeld dat we de score array willen resetten, door alle waarden naar 0 te brengen:

for(int i=0; i<scoreTom.length; i=i+1){

     scoreTom[i] = 0;

}

Of we maken een array met 5 onderverdelingen aan, en we vullen deze met willekeurige getallen:

float[] randomGetallen;

void setup(){
     size(500,500);
     randomGetallen = new float[5];

     for(int i=0; i<randomGetallen.length; i=i+1){
          randomGetallen[i] = random(0,10);
     }
     println(randomGetallen);
}

Oefeningen

  1. maak een array aan met de eerste helft random getallen tussen 10 en 300, de 2de helft een random getal tussen 500 en 700
  2. kan jij, door nog een loop te schrijven, het gemiddelde van al de getallen uit de array “randomGetallen[]” berekenen?

tips:

  • je hebt een globale variabele “totaal” nodig
  • de loop om de waarden op te halen, lijkt sterk op die om hem te vullen

Verplichte oefening

a. Maak 2 arrays, met minstens 100 plaatsen, die zichzelf vult met random waarden die liggen tussen 0 en de breedte (voor de eerste array) en de lengte (de tweede array) van je programma.

b. teken ellipsen op de locatie, samengesteld uit getallen van array 1 en 2. (met dezelfde index)

c verbind de huidige ellips steeds met een lijn naar de vorige ellips.

Objecten en klassen >