Avatar billede Slettet bruger
18. oktober 2000 - 23:42 Der er 4 kommentarer og
1 løsning

hægtet liste..

ja, det er sku et svært spgm, men here goes: Jeg skal have indsat et objekt i en hægtet liste, men efter timers forsøg, er det ikke lykkedes, konsekvent får jeg en nullpointerexception hver gang....hvad går der galt?
udsnit af koden:
else
while (temp.neste!=null)
  temp = temp.neste;
  ny.neste = temp.neste;  <-her går det galt
  temp.neste = ny;
skriv gerne til mig på kevin@lystig.dk
på forhånd tak...
Avatar billede lens Nybegynder
19. oktober 2000 - 02:27 #1
Prøv med denne har indsaet-metode:
(du skal naturligvis lige tilpasse div. navne til din egen kode :-))

public void Indsaet(String b)
{
  if (foerste==null)
  {
    element e = new element(String b);
    e.neste=foerste;
    foerste=e;
  }
  else
  {
    temp = foerste;
    {
      element e = new element(String b);
      e.neste = temp.neste;
      temp.neste = e;
    }
  }
}

(Det blev lidt uoverskueligt her på de sene timer, men prøv lige om det virker!!)
Avatar billede bearhugx Nybegynder
19. oktober 2000 - 02:35 #2
Som forklaring på alle dine NullEx\'ere .....

Ved hjælp af  :
  while (temp.neste!=null) temp = temp.neste;

får du temp til at pege på det absolut sidste element i listen... Derfor er det naturligt at du får NullEx. når det er at du vil rekvirere temp.neste i :
  ny.neste = temp.neste;... temp.neste peger på NULL :-/

---
hvis du vil indsætte f.eks. element B i mellem to elementer, lad os kalde dem A og C  ( ...-->A-->C-->... ), så kan det gøres på følgende måde.

Sæt B.neste = A.næste  (=C)  == B-->C
Sæt A.neste = B              == A-->B-->C

Så får du (...-->A-->B-->C-->...)

(først finder du det element, som det nye element skal placeres lige efter
  Dette element kalder jeg a - Ud fra det findes c og b.neste sættes til at pege på dette : )


Den kode skrives sådanne :
-------8<----8<-----8<----
  if( a.neste != null )
  { nyeElement.neste = a.neste; }
  else
  { nyeElement.neste = null; }

  a.neste = nyeElement;
-------8<----8<-----8<----
 


Dog vil jeg henstille til at lige i dit udsnit er \'temp\' et ret dårligt valg til variabel-navn.
Derudover er jeg lidt forundret over din while-procedure, hvad skal der opnåes - skal det nye element altid sættes til sidst i listen ... I så tilfælde vil jeg tilråde at bruge en tail-head-struktur...

/Søren ... ( lidt forvirret over spørgsmålet - men håber du fik svaret du ledte efter ... ellers bare spørg igen :-)))

/-- Warning : Using module \"Coffee\" to atempt reboot of User...
Avatar billede Slettet bruger
19. oktober 2000 - 13:30 #3
ja det er også godt nok, men overblikket har jeg mistet. Her kommer hele koden som er en metode til at indsætte et objekt i en liste:

  public void indsaet(Tegning ny)
  {
    Tegning temp = start;
    if (start==null) //indsæt første plads
    start=ny;
    else if (start.neste==null)//1 objekt i listen
    start.neste=ny;
    else
    while (temp.neste!=null) // hvis der er flere objekter
    {
          temp = temp.neste;
      ny.neste = temp.neste; //ny tegning indsættes
      temp.neste = ny;
            }
    }
jeg kan simpelthen ikke finde hoved eller hale i de forskellige temp.neste og ny.neste og hvad de ellers hedder..
Avatar billede lens Nybegynder
19. oktober 2000 - 16:52 #4
Fik du det til at virke?
Avatar billede Slettet bruger
19. oktober 2000 - 17:17 #5
ja men prg stopper, når jeg forsøger at sætte tredie objekt ind i listen, så der er noget galt med metoden...det stopper bare og jeg kan ikke gennemskue hvad der er galt....jeg går ud fra at det er while løkken der er forkert...?
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