Java ArrayIndexOutOfBoundsException

Pagina: 1
Acties:

  • rdebruyn
  • Registratie: Oktober 2002
  • Laatst online: 29-08 21:51
Hallo!

Ik ben bezig met een simpel tekenprogramma, maar stuit elke keer maar weer op de zelfde fout. Bij het maken van een tekening komt er op een gegeven moment een 'arrayindexoutofboundsexception' op het commandwindow te staan. De file waar in alles staat is te downen vanaf http://i-future.nl/temp/opdracht.zip

Wie o wie kan mij vertellen wat de fout veroorzaakt? In een ander programma wat gebruik maakt van dezelfde tekenclasses (cirkel.java, lijn.java etc) krijg ik de exception niet.

Alvast heel erg bedankt voor de hulp!!

  • D2k
  • Registratie: Januari 2001
  • Laatst online: 29-08 22:51

D2k

tja wat zou die error betekenen?
heb je al gedebugged?s

Doet iets met Cloud (MS/IBM)


  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Zie d2k.

http://java.sun.com/j2se/...OutOfBoundsException.html

Je komt dus buiten een array. Je krijgt ook een stacktrace te zien, waarin de regelnummers/files staan waar het fout is gegaan.

  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
Even een aanvullingkje.

Jij wilt bijvoorbeeld n waardes opslaan. Dat kan. Dan declareer je dat als volgt als we bijv n op 6 stellen:
Java:
1
MyDataStructure[ ] _theData = new MyDataStructure[ 6 ];


Wat nu gebeurd is dat er 6x de ruimte reserveerd is die een MyDataStructure aan gaat nemen.
Al deze ruimtes kun je benaderen door het opvragen van de array met een index. Deze indexen gaan van 0 tot n-1 (in dit geval heb je dus 0,1,2,3,4,5)

Waar het dan meestal fout gaat is dat men denkt dat een array waardes 1 t/m n heeft. De volgende code throwt dus een IndexOutOfBoundsException
Java:
1
2
for( int i =0; i <= _theData.length; i++ )
    _theData[i] = whatever;
Hier probeer je dus _theData[6] te benaderen.

Dit weet je ongetwijfeld allemaal al, maar dan rijst de vraag "waarom array's gebruiken als dat zo 'niet logisch' is"

Daar hebben al een hoop mensen over nagedacht en de volgende oplossing zit in java. Gebruik in plaats van een array (waarbij je precies moet weten hoe groot ie is) een andere structuur die al die boekhouding voor je doet.
Deze structuren zijn op allerlei verschillende manieren te implementeren, namelijk zoals HashMaps, LinkedLists en Vectoren. Daarom is gekwalificeerd wat ze allemaal _minimaal_ moeten kunnen in de interface Collection. Klasses die een onderdeel zijn van de Collections zijn oa hierboven genoemd.

Maar wat helemaal mooi is aan de Collections, is dat je totaal niet hoeft te weten hoeveel en waar er wat in zit. Je kunt namelijk makkelijk alle elementen langslopen dmv een Iterator

Zo houdt je ook alles mooi transparant en veel minder fout gevoelig.