Avatar billede backupmand Nybegynder
20. december 2000 - 13:32 Der er 17 kommentarer og
1 løsning

Hjælp med array af hægtede lister

Hej, jeg får en nullpointerexception
ved flg. kode:

class DaginstitutionsSystem // opg. d
{
      Venteliste [] dagSystem;     
     
      public DaginstitutionsSystem ()
      {
      dagSystem = new Venteliste[3];
      }     
     
      public void indsaet (int type, Barn b)                    // opg. e
      {
     
     
      if (type==0) // separerer typer
          {dagSystem[0]=indsæt(b);} // kører indsæt metoden på dagSystem-objektet
      else if (type==1)
          {dagSystem[1].indsæt(b);}
      else if (type==2)
          {dagSystem[2].indsæt(b);}
      } 
}

jeg har nogle klasser med indsæt-metoder
og alle disse virker fint, nogle der kan komme i tanke om en mulig løsning her?

tak
Avatar billede pstric Nybegynder
20. december 2000 - 13:40 #1
if (type==0)
  {dagSystem.indsæt(b);}
Avatar billede pstric Nybegynder
20. december 2000 - 13:42 #2
Men det er vel ikke det der er fejlen?
Avatar billede pstric Nybegynder
20. december 2000 - 13:43 #3
javac skulle gerne komme med en syntax terror
Avatar billede backupmand Nybegynder
20. december 2000 - 13:48 #4
Opg4.java:137: Method indsæt(Barn) not found in class java.lang.Object.
          {dagSystem.indsæt(b);} // kører indsæt metoden på dagSystem-objektet
                          ^
1 error

denne fejl får jeg hvis jeg prøver dit forslag,
hvorfra skulle compileren vide hvilken position
listen skal ind på ?
Avatar billede pstric Nybegynder
20. december 2000 - 13:53 #5
Nåh ja, det skulle jo være dagSystem[0].indsæt(b)
Men dagSystem[0]=indsæt(b) burde altså heller ikke virke.
Avatar billede backupmand Nybegynder
20. december 2000 - 13:58 #6
Jeg får flg. fejl:
Java.Lang.NullPointerException;navn: Baby alder:
    at DaginstitutionsSystem.indsaet(Opg4.java:137)
    at Opg4.main(Opg4.java:158)
Exception in thread \"main\"

Avatar billede backupmand Nybegynder
20. december 2000 - 13:59 #7
Det kan måske være svært,når jeg ikke poster
hele koden, men det har jeg med vilje ikke gjort.
pointen er, at jeg får en nullpointerexception,
når jeg skriver dagSystem[0].indsæt(b);
Avatar billede ejoergensen Nybegynder
20. december 2000 - 14:22 #8
er problemet ikke at dine[] står for sig selv istedet for Venteliste[] dagSystem, tror heller ikke du behøver den sidste if:
else if (type==1)
          {dagSystem[1].indsæt(b);}
      else (type==2)
          {dagSystem[2].indsæt(b);}
  Iøvrigt, har du defineret dit b? 
Avatar billede pstric Nybegynder
20. december 2000 - 14:25 #9
class DaginstitutionsSystem // opg. d
{
      Venteliste [] dagSystem;     
     
      public DaginstitutionsSystem ()
      {
      dagSystem = new Venteliste[3];
-->  dagSystem[0] = new Venteliste();
      ...
      }     
     
      public void indsaet (int type, Barn b)                    // opg. e
      {
     
     
      if (type==0) // separerer typer
          {dagSystem[0]=indsæt(b);} // kører indsæt metoden på dagSystem-objektet
      else if (type==1)
          {dagSystem[1].indsæt(b);}
      else if (type==2)
          {dagSystem[2].indsæt(b);}
      } 
}
Avatar billede pstric Nybegynder
20. december 2000 - 14:26 #10
constructoren initialiserer array\'et, men ikke dets elementer. Derfor NullPointerException.
Avatar billede backupmand Nybegynder
20. december 2000 - 14:29 #11
Jeg har brugt en for løkke til at oprette de
3 positioner. Det kan man jo godt og så sparer
man plads.... men jeg får stadig en NullPointer-
Exception.

class DaginstitutionsSystem // opg. d
{
      Venteliste [] dagSystem;     
     
      public DaginstitutionsSystem ()
      {
      for (int i=0;i<3;i++)
          dagSystem[i] = new Venteliste();
     
      }     
     
      public void indsaet (int type, Barn b)                    // opg. e
      {
           
      if  (type==0) // separerer typer
          {dagSystem[0].indsæt(b);}
      else if (type==1)
          {dagSystem[1].indsæt(b);}
      else if (type==2)
          {dagSystem[2].indsæt(b);}
      } 
}

Jeg får denne fejl:

    at Opg4.main(Opg4.java:158)
Exception in thread \"main\"

Avatar billede pstric Nybegynder
20. december 2000 - 14:32 #12
Du opretter vel stadig array\'et
Avatar billede pstric Nybegynder
20. december 2000 - 14:35 #13
Er det ikke også snart på tide, at vi får fjernet den grimme if-sætning. Hvad med:
public void indsæt(int type, Barn b) {
  dagSystem[type].indsæt(b);
}
Avatar billede backupmand Nybegynder
20. december 2000 - 14:37 #14
Jeg får stadig en NullPointerException, dit
forslag gør kun programmet kortere.

Avatar billede pstric Nybegynder
20. december 2000 - 14:39 #15
class DaginstitutionSystem {
  Venteliste[] dagSystem; {
    dagSystem = new Venteliste[3];
    for(int i=0; i<3; i++) {
      dagSystem[i] = new Venteliste();
    }
  }
  public void indsæt(int type, Barn b) {
    dagSystem[type].indsæt(b);
  }
}
Avatar billede backupmand Nybegynder
20. december 2000 - 14:46 #16
Jeg får ikke længere en NullPointerException...
Du initialiserer arrayet (sætter det op) i
konstruktøren og dernæst fortæller du (igen?)
hvor langt det skal være.. hvad er det jeg går
glip af her ?
Avatar billede pstric Nybegynder
20. december 2000 - 14:56 #17
Nå, men så fik vi da programmet til at virke, ikk\'?

dagSystem erklæres først som et array af Venteliste\'r.
Derefter initialiseres dagSystem til et array med længden 3, som skal indeholde Venteliste\'r.
Derefter oprettes de Venteliste\'r, som dagSystem skal indeholde.

Det hele foregår i en instance initializer block, men kunne ligeså godt have stået i en constructor:
Venteliste[] dagSystem;
DaginstitutionsSystem() {
  dagSystem = new ... osv.
Avatar billede backupmand Nybegynder
20. december 2000 - 18:19 #18
jeopardy, det virker..
jeg accepterer dit svar...
Så skal jeg bare have lavet en toString
til at skrive indholdet af arrayet ud med.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester