Gå til innhold

Flettet do- og for-sløyfe fungerer ikke!


Anbefalte innlegg

Dette gjør meg sprø!

Jeg har en array: int[][]utvinning=new int[11][17];

Jeg ønsker å beregne summen for hver rekke (1-11):

1. public void beregne(){
2.      int rekke = 0; 
3.      do{
4.	  for(int felt = 0; felt < 17; felt++){
5.	      rutvinning = rutvinning + utvinning[rekke][felt];
6.	      skjerm.outln("Samlet utvinning for rekke " + rekke + " er " + rutvinning + ".");
7. rekke++;
8.    }
9.     } while (rekke < 11);
10.      skjerm.outln();
11. 	  this.ordresloyfe();
12.  }

 

Summen for rekke 0 = 10 og rekke 1 = 11, resultatet av metoden blir imidlertid slik:

 

> Samlet utvinning for rekke 0 er 10.

> Samlet utvinning for rekke 1 er 10.

> ......

> Samlet utvinning for rekke 10 er 10.

> Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 11

at Ordresloyfe.beregne(Ordresloyfe.java:87)

.....

Ut fra det kan det se ut til at variabeln "rekke" er oppdatert når den skrives ut i linje 6, men ikke når summen beregnes i linje 5.

Dette er jo helt ulogisk!!!

Kan noen være så snill å forklare hva som skjer??

Endret av PelleP
Lenke til kommentar
Videoannonse
Annonse

Hvorfor ikke bare bruke to for-løkker?

 

for (int i = 0; i < 11; i++) {
 int sum = 0;
 for (int k = 0; k < 17; k++) {
sum += utvinning[i][k];
 }
 System.out.println("Samlet utvinning for rekke " +i + " er " + sum + ".");
}

 

Forresten er feilen at du tar rekke++ inni for-løkken, så både felt og rekke blir oppdatert.

 

int rekke = 0;
do {
 for (int felt = 0; felt < 17; felt++) {
rutvinning = rutvinning + utvinning[rekke][felt];
skjerm.outln("Samlet utvinning for rekke " + rekke + " er " + rutvinning + ".");
 }
 rekke++;
} while (rekke < 11);

Lenke til kommentar
Hvorfor ikke bare bruke to for-løkker?

 

Jeg prøvde det, men fikk det ikke til å fungere, fikk samme feil som jeg først fikk nå.

 

Forresten er feilen at du tar rekke++ inni for-løkken, så både felt og rekke blir oppdatert.

 

Sorry, skjønner ikke!

 

Du øker rekke inne i for-løkken, hvor det ikke er noen test på om den er mindre enn 11 eller ikke...

La den bytte plass med krøll-parantesen på neste linje, så skulle det funke...

 

Jeg gorde det og da ble utregningen riktig. Det ble imidlertid feil alikevel fordi den beregnede summen da ble skrevet ut for hver gang for-løkken ble gjennomgått, og det var ikke hensikten. (Det var for øvrig den samme feilen jeg ikke greide å få bor ved å bruke dobbel for-sløyfe.)

 

Løsningen var å i tilegg fjerne "{" sist på linje 4 og "}" på linje 8, dermed var utskriftkommandoen utenfor for-løkken, og da fungerte det! (Jeg klarte i hvert fall noe uten hjelp!)

 

Jeg kan imidlertid fortsatt ikke forstå hvorfor koden slik den opprinnelig var beregnet summen for rekke 0 hver gang for-løkken ble gjennomgått, som om variabeln "rekke" ikke ble oppdatert. Samtidig ble variablen rekke oppdater i utskriften. Det virker fortsatt fullstendig ulogisk, men det kanskje løser seg etter litt søvn?

 

Uansett er jeg svært takknemlig for hjelpen, ellers så ville jeg ha grublet på det her hele natten!

Endret av PelleP
Lenke til kommentar

Grunnen til dette var to.

 

1. Du økte rekke inne i for-løkka, så da du var ferdig med for-løkka var du også ferdig med while løkka, siden rekke da var 17.

 

2. Du skrev ut for hvert felt, ikke bare for hver rekke. Når du flyttet utskriftsetningen ut av for-løkka skrev du derimot ut for hver rekke.

 

Disse feilene er ganske vanlige å gjøre. Sett veldig mange av de da jeg har rettet obligatoriske oppgaver.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...