5 svar
126 visningar
civilingengör behöver inte mer hjälp
civilingengör 193
Postad: 9 maj 2022 07:21

sortering av lista

Hej, hur kommer det sig att metoden r1 inte returnerar en omvänd lista såsom den önskas göra (den skall alltså egentligen returnera en lista med värdena 5,4,3,2,1 men returnerar istället samma ursprungliga värden)?

CurtJ Online 1200
Postad: 9 maj 2022 08:10

Parametern a är en kopia av referensen till den anropande kodens vektor. Kopian är bara tillgänglig i metoden och den anropande kodens referens till vektorn ändras inte. I r1 ändras referensen i metoden men den förändringen påverkar inte den anropande kodens referens. I r2 sätts värden i den anropande kodens vektorelement och det är därför den gör "vad den ska".

Ändrar man värden i en metod är det kutym att returnera värdet i metoden. Det blir lättare att läsa och förstå då = mindre fel.

civilingengör 193
Postad: 9 maj 2022 11:00

Tack så mycket för förklaringen. Tyvärr förstår jag forfarande inte. Varför påverkar inte metoden ändringen av vektorn i r1?

CurtJ Online 1200
Postad: 9 maj 2022 14:14

I r1 så tilldelar du parametern a referensen till temp så att i metoden så pekar a på temp-arrayen. När exekveringen av r1 är klar och hoppar tillbaks till anropen av r1 så återställs värdet i a till vad det var vid anropet, dvs a pekar på den orörda vektorn som den pekade på när r1 anropades. I r2 så ändras  den ursprungliga vektorn genom referensen a (som där inte har ändrats)

Klarnade det?

CurtJ Online 1200
Postad: 9 maj 2022 15:36

Jag ska förtydliga lite.

När anropet ArrayHandler.r1(nbrs1) görs så skickar runtime-miljön in en kopia av referensen till vektorn nbrs1. Vi kan säga att det är adressen även om det inte är riktigt sant. I nbrs1 skapas temp och manipuleras och slutligen så tilldelas parametern a värdet av referensen till tmp. Observera att a är en lokal variabel och den urspungliga referensen till nbrs1 aldrig har rörts, det är kopian i parametern som skrivits över och innehållet i nbrs1 har inte heller rörts så från huvudspårets synpunkt så där har inget ändrats.

I r2 däremot så manipuleras innehållet i nbrs2 direkt via referensen och DET kan inte  kompilatorn återställa (för den är inte konstruerad så) så där är ändringen permanent  kan man säg.

Hoppas det klarnar av min förklaring

civilingengör 193
Postad: 9 maj 2022 19:53

Absolut! Det blev mycket tydligare nu. Tack så mycket för din tid och hjälp.

Svara
Close