6 svar
128 visningar
civilingengör behöver inte mer hjälp
civilingengör 193
Postad: 26 mar 2022 07:15 Redigerad: 26 mar 2022 08:06

Kodfel, loop i vektor

Hej! Jag har klurat på denna kodsnutt: en metod för att lägga in ytterligare en användare i en vektor. När jag testar att ändra "users[ i - 1]" till "users[ i + 1]" får jag nedanstående felmeddelande. Om jag däremot använder "users[ i - 1]" går koden att köra men ingen användare läggs till i vektorn. Däremot anser jag "users[ i + 1 ]" vara mer logiskt då jag vill skapa ytterligare en plats i vektorn. Just nu raderas ju en person från vektorn.

int n = antal användare i vektorn just nu vilket är 2000

Användarna i vektorn sorteras efter stigande kortnummer*

Fermatrix 7841 – Fd. Medlem
Postad: 26 mar 2022 08:46

Det är svårt att säga utan att hela din kod men Jag skulle gissa på att problemet är att första gången du kallar på funktionen add är listan tom. Oavsett om listan är tom, full, halvfull etc så körs din while-loop.

Om du första gången när du kör add försöker hämta CardNbr så kommer du direkt att få en NULLPOINTER eftersom du försöker nu hämta en parameter från ett element i arrayen som är null. 

Ser du problemet?

Du försöker alltså hämta kortnummret för en null entry vilket klart inte kommer att gå! =)

civilingengör 193
Postad: 26 mar 2022 09:30 Redigerad: 26 mar 2022 10:10

Tack för detta resonemang. I ett testprogram skriver jag ut listan innan jag lägger till ytterligare användare. Listan har lästs in från en textfil och det fungerar att skriva ut listan med alla 2000 användare. Däremot kan ytterligare användare inte läggas till. Min nya användare läggs inte till i listan. 

civilingengör 193
Postad: 26 mar 2022 10:11 Redigerad: 26 mar 2022 10:18

Uppdatering:

Ny användare läggs till i listan, däremot ändras inte antalet människor i tabellen, dvs någon annan försvinner oc den nya användaren har tagit dess plats. Jag misstänker att det finns ett fel i punkt 2 i min kod

Fermatrix 7841 – Fd. Medlem
Postad: 26 mar 2022 10:45

Jan du visa hela koden? Är lite jobbigt annars att veta vad som händer bakom kulisserna! Är din array av storlek 2000 och har du redan fyllt ut den? Isf så kan du inte lägga till ett nytt element utan att överskrida en on du inte förstorar arrayen. Var också försiktig i din while loop att inte loopa över Null värden.

civilingengör 193
Postad: 26 mar 2022 10:54 Redigerad: 26 mar 2022 10:57

Detta är min testkod först kontrollerat mina metoder fungerar. Arrayen har 30000 element, varav 20000 har givna värden, inlästa från en lista "users.txt".

Här är metoderna:

Problemet jag har just nu är att det bara finns 2000 användare i min array trots att jag adderat "u5". Alltså har "u5" tagit någon persons plats. hur åtgärdar jag detta. Jag misstänker att det finns ett fel i "2." i metoden "add". Jag har provat att addera "n++" till metoden men då får jag felmeddelandet:

Cannot invoke "cardreader.User.getCardNbr()" because "this.users[pos]" is null (rad 57)

civilingengör 193
Postad: 27 mar 2022 09:09

Jag har nu löst alla kodfel, tack för hjälpen!

Svara
Close