Programmeren in Java/Arrays

Uit Wikibooks
Ga naar: navigatie, zoek


Programmeren in Java In ontwikkeling. Revisiedatum: onbekend

  1. Inleiding Redelijk ontwikkeld. Revisiedatum: 22 augustus 2008
  2. Basis Goed ontwikkeld. Revisiedatum: 24 november 2007
  3. In- & uitvoer In ontwikkeling. Revisiedatum: 24 november 2007
  4. Stringbewerkingen In ontwikkeling. Revisiedatum: 24 november 2007
  5. Arrays Nog vrijwel niets. Revisiedatum: 24 november 2007
  6. Collections Nog vrijwel niets. Revisiedatum: 24 november 2007
  7. Exceptions Redelijk ontwikkeld. Revisiedatum: 24 november 2007
  8. Generics Nog vrijwel niets. Revisiedatum: 24 november 2007
  9. Ingebouwde functies Nog vrijwel niets. Revisiedatum: 20 januari 2007
  10. Multithreading Nog vrijwel niets. Revisiedatum: 20 januari 2007
  11. GUI In ontwikkeling. Revisiedatum: 24 november 2007
  12. JSP: JavaServer Pages Redelijk ontwikkeld. Revisiedatum: 24 november 2007

Klassen

  1. Klassen Goed ontwikkeld. Revisiedatum: 24 november 2007
  2. Overerving In ontwikkeling. Revisiedatum: 20 januari 2007
  3. Geavanceerde klassen In ontwikkeling. Revisiedatum: 24 november 2007

Design Patterns

  1. Strategy Pattern Nog vrijwel niets. Revisiedatum: 26 december 2010

Appendices

  1. Appendix A: Installatie In ontwikkeling. Revisiedatum: 24 november 2007
  2. Appendix B: Javadoc In ontwikkeling. Revisiedatum: 24 november 2007


Een Array aanmaken[bewerken]

Een array is een opeenvolging van gelijkaardige elementen:

Java-code:

float dagtemperaturen [];
double[] meetwaarden;
byte getal[];
String namen[];
Char letter[];

Java-code:

namen = new String[]{"Filips", "Adams", "Declercq"};
klinkers = new Char[]{'a', 'e', 'i', 'o', 'u'};

Een array kopiëren[bewerken]

Een array kopiëren naar de andere gaat niet zomaar.

Java-code:

String namen[] = new String[]{"Filips", "Adams", "Declercq"};
String namen2[] = namen;

Er is niets mis met deze code. Maar er is echter een groot probleem, dit volgend stukje code zal het verduidelijken.

Java-code:

for(int i = 0; i < namen2.length; i++){
	namen2[i] = namen2[i].toUpperCase();
}
 
for(int i = 0; i < namen.length; i++){
	System.out.println(namen[i]);
}

Scherm:

FILIPS
ADAMS
DECLERCQ

Als je de code hebt gelezen zul je wel snappen dat er iets niet klopt. We hebben de namen aangepast in de array namen2 maar als we de array namen op het scherm tonen zijn die ook aangepast. Dit komt omdat je niet de gegevens kopieert maar omdat je het adres waar de gegevens zich bevinden in het werkgeheugen kopieert. Hierdoor verwijzen de twee arrays naar dezelfde gegevens. Dit kan zijn nut hebben maar als je de gegevens werkelijk wilt kopiëren kun je het volgende doen.

Java-code:

String namen[] = new String[]{"Filips", "Adams", "Declercq"};
String namen2[] = namen.clone();
 
//of
 
String namen[] = new String[]{"Filips", "Adams", "Declercq"};
String namen2[] = new String[namen.length];
System.arraycopy(namen, 0, namen2, 0, namen.length);

De eerste manier is via .clone(). .clone() is een methode van array's en kan ook worden gebruikt bij andere objecten. Hierbij wordt een exacte kopie gemaakt van de array namen en wordt het adres van de kopie gekopierd in de array namen2.

De tweede manier is via System.arraycopy(). Hierbij wordt ook de array gekopieerd maar kun je ook bepalen vanwaar het moet beginnen kopieren, vanafwaar moet de gekopierde gegevens komen in de nieuwe array en hoeveel moet er worden gekopieerd. Dit vergt echter meer programmeerwerk.

De lengte van een array veranderen[bewerken]

Een array kan niet groter gemaakt worden, maar door de inhoud naar een andere array te kopiëren, kan dat probleem toch opgelost worden. Met de functie .length kan de lengte van de array bepaald worden.

Java-code:

int kleine[] = new int[6];
int grotere[] = new int[kleine.length+1];
 
//kopieer de inhoud van de kleine tabel in de grotere
System.arraycopy(kleine, 0, grotere, 0, kleine.length);
 
//laat de referentie kleine naar grotere wijzen
//en grotere naar null (nergens dus)
kleine = grotere;
grotere = null;

Een array benaderen met een lus[bewerken]

Een element van een array één voor één inlezen of tonen doe je het best met een lus in de plaats van voor ieder element aparte code te schrijven. Je gebruikt het best een for-lus.

Array benaderen met een for-lus-code:

int getallen[] = {1,2,3,4,5};
for(int i = 0; i < getallen.length; i++){
    System.out.println(i + "de element: " + getallen[i]);
}

De variabele i zal bepalen welk element uit de array wordt gehaald. Aangezien java zero-based is moet je beginnen met 0, 0 betekent hier echter het eerste element, 1 het tweede, 2 het derde enzovoort. Nadat de for-lus één keer werd uitgevoerd zal i worden verhoogd met één en kan de volgende element worden gebruikt. Dit stukje programma toont de inhoud van de array maar je kunt op deze manier natuurlijk ook natuurlijk gegevens inlezen.

For-lus in Java 5.0[bewerken]

In Java 5.0 is er een extra for-lus toegevoegd om makkelijker met arrays te werken. Er moet echter een onderscheid worden gemaakt tussen arrays van primitieve variabelen(zoals int, char, enz.) en Objecten. Het volgende stukje programmacode laat de nieuwe for-lus werken met een array van primitieve variabelen.

Array benaderen met een for-lus-code:

int getallen[] = {1,2,3,4,5};
for(int i : getallen){
	System.out.println(i);
}

In dit voorbeeld is er een array van int's. Bij de for-lus is er een variabel genaamd i. Deze dient om tijdelijk de getallen van de array in te lezen. Eerst wordt het eerste getallen ingelezen en in de variabele i geplaatst vervolgens wordt die getoond op het scherm. Dan wordt het tweede genomen enzoverder. Het nut is dat het meteen programmacode bespaart. Kijk maar naar het vorige stukje code en je ziet meteen een groot verschil. Er is echter een grote maar in dit verhaal je kunt met deze for-lus de gegevens niet aanpassen noch nieuwe gegevens in de array plaatsen.

Array benaderen met een for-lus-code:

int getallen[] = {1,2,3,4,5};
for(int i: getallen){
	i++;
}

Dit programmacode zal geen effect hebben op het getal van de array zelf, de gegevens blijven hetzelfde hier komt echter ook meteen het onderscheid met een array van objecten. In tegenstelling met primitieve variabelen waar de inhoud wordt gekopieerd in een nieuwe variabele wordt bij een object het adres in het werkgeheugen van het object gekopieerd naar een "nieuw" object. Hierdoor kunnen er wel bewerkingen worden gedaan bij zo'n for-lus.


Informatie afkomstig van http://nl.wikibooks.org Wikibooks NL.
Wikibooks NL is onderdeel van de wikimediafoundation.