Gå til innhold

Oblig3 - peker problem


Anbefalte innlegg

Skrevet

Har et lite problem med min obligatoriske oppgave på kurset INF1000.

 

Feilmeldingen er:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 65

at HybelHus.<init>(Oblig3.java:42)

at Oblig3.main(Oblig3.java:353)

 

feilen kan komme fra:

 

class HybelHus {
   
   Hybel[][] hyblene = new Hybel[4][8];
   
   HybelHus(String filnavn) {

       //Hybel[][] hyblene = new Hybel[4][8];
       
       for (int a=0;a<4;a++) {
           for (int b=0;b<8;b++) {
               char b2 = (char) (a + 'A');
               hyblene[a][b2] = new Hybel(a,b2);
           } //end for b
       } //end for a
class HybelHus {

   Hybel[][] hyblene = new Hybel[4][8];
   
   HybelHus(String filnavn) {

       for (int a=0;a<4;a++) {
           for (int b=0;b<8;b++) {
               char b2 = (char) (a + 'A');
               hyblene[a][b2] = new Hybel(a,b2);
           } //end for b
       } //end for a

(...)

 

eller class Oblig3:

   class Oblig3 {
   
   public static void main(String [] args) {
       HybelHus h = new HybelHus("HaiHus.data");
       h.meny();
       
       } //end main
} //end Oblig3

 

kan legge ut java-filen, men frister meg lite.

er det nødvendig, så si ifra.

Videoannonse
Annonse
Skrevet

char b2 = (char) (a + 'A');

hyblene[a][b2] = new Hybel(a,b2);

 

Hva er hensikten med b2? Hvilke parametere har konstruktøren til Hybel?

Skrevet

b2 er bare en omforming fra char til int.

 

de to classene som kan være nyttig:

 

class Student {
   int elektrisitet;
   int saldo;
   String navn;
   Student(String navn, int saldo) {
       this.navn = navn;
       this.saldo = saldo;
   } //end Student konstrukt�r
} //end class Student

class Hybel {
   Student leietager;
   int gang;
   char bokstav;
   Hybel(int gang, char bokstav) {
       this.gang = gang;
       this.bokstav = bokstav;
   } //end Hybel konstrukt�r
} //end class Hybel

Skrevet

Prøv slik da:

 

char b2 = (char) (a + 'A');
hyblene[a][b] = new Hybel(a,b2);

 

b2 kan ikke brukes om indeks i listen..

Skrevet

retta litt på koden, skjønte hva du mente med b2.

men hva er feilen her da?

 

forandra:

for (int a=0;a<4;a++) {
    for (int b=0;b<8;b++) {
 hyblene[a][b] = new Hybel();
    } //end for b
} //end for a

 

feilmelding

/uio/platon/mn-l12/stianvi/inf1000/oblig3/newObl/Oblig3.java:41: Hybel(int,char) in Hybel cannot be applied to ()
 hyblene[a][b] = new Hybel();
                           ^
1 error

Skrevet (endret)

Du endra litt for mye tror jeg.. ;)

 

      for (int a=0;a<4;a++) {
          for (int b=0;b<8;b++) {
              char b2 = (char) (a + 'A');
              hyblene[a][b] = new Hybel(a,b2);
          } //end for b
      } //end for a

Endret av gnab
Skrevet (endret)

Legg ut fila, så kan jeg prøve å kjøre det her og se om jeg får noe ut av det.

Er uansett litt nysgjerrig på hvordan oppgavene deres ser ut, og hvordan dere legger det fram:)

Endret av Nudo
Skrevet
Dette er ikke noe pekerproblem (i ett ord). Ganske enkelt fordi pekere er noe man har i C/C++ og ikke i Java.

På UiO inf1000 har vi pekere i java.. :yes:

Skrevet (endret)

Så vidt jeg skjønner så betyr feilmeldinga at det ikke er nok plass i arrayen, og i dette tilfellet er det fordi du søker igjennom en rad og en kolonne for mye i for-løkka di.

 

for (int a=0;a<4;a++) {
           for (int b=0;b<8;b++) {
[CODE]

Arrayindex starter på 0, og når du har 4*8 array så må du søke igjennom med 3 og 7.

for (int a=0;a<3;a++) {

for (int b=0;b<7;b++) {

 

Så skal det nok fungere:)

Endret av Brandvold
Skrevet (endret)

Grunnen til at han fikk feilmeldinga var at han prøvde å skrive til et element b2 som ikke eksisterer i listen.. For-løkken fungerer helt fint..

 

for (int a=0;a<3;a++) {
 for (int b=0;b<7;b++) {
   ...
 }
}

 

Disse to for-løkkene vil går fra henholdsvis 0-2 og 0-6.. a++ og b++ blir kjørt etter hver løkke, ikke før..

Endret av gnab
Skrevet
Dette er ikke noe pekerproblem (i ett ord). Ganske enkelt fordi pekere er noe man har i C/C++ og ikke i Java.

På UiO inf1000 har vi pekere i java.. :yes:

Pekere i C/C++ er noe helt annet enn hva enn hva "pekere" i java er... Dette kommer du til å finne ut i seinere kurs! :)

Skrevet
char er en bokstav i Java...(kan jo vel bestå av tall også da, men det er ikke egentlig et tall :p)

Ja..så da vil jo "hyblene[a][b2]" bli galt når "b2" er en char.

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...