wat doet dit stukje code

Status
Niet open voor verdere reacties.

grizzlybeer

Gebruiker
Lid geworden
30 jan 2007
Berichten
58
Ik heb de methode
public void setBuur(int richting, Positie dePositie) {
buren[richting] = dePositie;


en het volgende
public void buren(){
for (int i=0; i<horVelden; i++){
for(int j=0; j<vertVelden; j++){
if(i > 0) {
velden[j].setBuur(velden[i-1][j], WEST);
}

if(i < 0) {
velden[j].setBuur(velden[i+1][j], OOST);
}

if(j > 0) {
velden[j].setBuur(velden[j-1], NOORD);
}

if(j < 0) {
velden[j].setBuur(velden[j+1], ZUID);
}
}
}
}

ik begrijp dat hier op ieder punt geprobeert wordt te kijken wat de positie van de buur is, die west, of zuid is. Maar i of j kan toch nooit kleiner dan 0 zijn. immers hij begint bij int i is 0 en int j is 0. Dus zuid en oost komen dan toch nooit voor?
 
Je hebt gelijk, aangenomen dat 0,0 links bovenin is zou dat punt geen west en geen noord moeten hebben. In principe gebeurt dat ook in je code, want een array kan geen negatieve index hebben velden[-1][0] bijvoorbeeld geeft een flinke error. Waarschijnlijk wordt dat in je code afgevangen met een exception en die buren worden dan niet gemaakt. Mooi is anders.
 
Er zat idd een foutje in, hiermee blijven de indexen binnen het bereik: :)

public void buren(){
for (int i=0; i<horVelden; i++){
for(int j=0; j<vertVelden; j++){
if(i > 0) {
velden[j].setBuur(velden[i-1][j], WEST);
}

if(i < horVelden - 1) {
velden[j].setBuur(velden[i+1][j], OOST);
}

if(j > 0) {
velden[j].setBuur(velden[j-1], NOORD);
}

if(j < vertVelden - 1) {
velden[j].setBuur(velden[j+1], ZUID);
}
}
}
}



Vr.Gr. Egel.
 
Maar dan moet je er wel weer goed om denken dat de horVelden en de vertVelden de breedte en de lengte van de array hebben.. anders kan je nog OutOfBounds gaan.. of niet de hele array meepakken.
 
out of bounds

Ik heb de array met horVelden VertVelden goed gezet maar krijg toch de foutmelding out of bounds ??
 
Zet eens een breakpoint en ga debuggen.. dan kan je precies zien waar hij OutOfBounds gaat.
 
Zoals ik al aangaf:
Wanneer de loop de eerste keer doorlopen wordt heeft i de waarde 0. Het aanroepen van
velden[j].setBuur(velden[i-1][j], WEST);
geeft dan
velden[0][0].setBuur(velden[-1][0], WEST);
en de -1 zorgt voor een Out of bound
 
Deze code werkt met de buren in paren, oost-west en noord-zuid
PHP:
public void buren() {
 for (int i = 0; i < horVelden; i++) {
  for (int j = 0; j < vertVelden; j++) {
   if (i > 0) {
    velden[i-1][j].setBuur(velden[i][j],OOST);
    velden[i][j].setBuur(velden[i-1][j],WEST);
    };
   if (j > 0) {
    velden[i][j-1].setBuur(velden[i][j],ZUID);
    velden[i][j].setBuur(velden[i][j-1],NOORD);
    };
   };
  };
 };
:o :) Vr.Gr. Egel.
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan