8 svar
48 visningar
Matte357 132
Postad: 15 dec 2018 Redigerad: 15 dec 2018

Uppgift på listor

Sitter fast på den här uppgiften. Svaret ska tydligen bli "3 3 3". Men jag förstår inte riktigt hur. Jag är med på att listan utgörs av (0,0,0) efter första for-loopen, med vad händer egentligen efter det? Är inte särskilt van med den förkortade notationen som används i de två sista for-looparna (Int x : list). 

Laguna Online 2548
Postad: 15 dec 2018

for (Int x:list) måste betyda att x antar varje element i listan som värde, i tur och ordning. Först är x = list[0], sedan x = list[1] och till sist x = list[2].

Vad tyckte du själv att resultatet borde bli?

Matte357 132
Postad: 15 dec 2018
Laguna skrev:

for (Int x:list) måste betyda att x antar varje element i listan som värde, i tur och ordning. Först är x = list[0], sedan x = list[1] och till sist x = list[2].

Vad tyckte du själv att resultatet borde bli?

Problemet är att jag inte riktigt ser hur de två sista for-looparna hänger ihop med varandra. Om svaret ska bli "3 3 3" måste ju rimligtvis listan innehålla (3,3,3) innan den sista loopen startas? Men hur kan det vara så när man inte ändrar listans innehåll i loop nr 2? Som du själv skriver ändrar man ju värdet på x, inte på list[0] osv.

Laguna Online 2548
Postad: 15 dec 2018 Redigerad: 15 dec 2018
Matte357 skrev:
Laguna skrev:

for (Int x:list) måste betyda att x antar varje element i listan som värde, i tur och ordning. Först är x = list[0], sedan x = list[1] och till sist x = list[2].

Vad tyckte du själv att resultatet borde bli?

Problemet är att jag inte riktigt ser hur de två sista for-looparna hänger ihop med varandra. Om svaret ska bli "3 3 3" måste ju rimligtvis listan innehålla (3,3,3) innan den sista loopen startas? Men hur kan det vara så när man inte ändrar listans innehåll i loop nr 2? Som du själv skriver ändrar man ju värdet på x, inte på list[0] osv.

Eftersom list[0] är en instans av en klass så får man inte en kopia av den när man sätter x till den, utan x refererar till originalinstansen ("pekar på" säger man ofta). Om man gör x.set(33) i första varvet så är det samma sak som om man hade gjort list[0].set(33).

Edit: tillägg: så jo, du har rätt i att listan är (3,3,3) före loop nr 3, och det är för att listan visst ändras i loop nr 2.

Matte357 132
Postad: 15 dec 2018
Laguna skrev:
Matte357 skrev:
Laguna skrev:

for (Int x:list) måste betyda att x antar varje element i listan som värde, i tur och ordning. Först är x = list[0], sedan x = list[1] och till sist x = list[2].

Vad tyckte du själv att resultatet borde bli?

Problemet är att jag inte riktigt ser hur de två sista for-looparna hänger ihop med varandra. Om svaret ska bli "3 3 3" måste ju rimligtvis listan innehålla (3,3,3) innan den sista loopen startas? Men hur kan det vara så när man inte ändrar listans innehåll i loop nr 2? Som du själv skriver ändrar man ju värdet på x, inte på list[0] osv.

Eftersom list[0] är en instans av en klass så får man inte en kopia av den när man sätter x till den, utan x refererar till originalinstansen ("pekar på" säger man ofta). Om man gör x.set(33) i första varvet så är det samma sak som om man hade gjort list[0].set(33).

Edit: tillägg: så jo, du har rätt i att listan är (3,3,3) före loop nr 3, och det är för att listan visst ändras i loop nr 2.

 Jahaa, då är jag med! Tack så hjärtligt!

Laguna Online 2548
Postad: 15 dec 2018
Matte357 skrev:
Laguna skrev:
Matte357 skrev:
Laguna skrev:

for (Int x:list) måste betyda att x antar varje element i listan som värde, i tur och ordning. Först är x = list[0], sedan x = list[1] och till sist x = list[2].

Vad tyckte du själv att resultatet borde bli?

Problemet är att jag inte riktigt ser hur de två sista for-looparna hänger ihop med varandra. Om svaret ska bli "3 3 3" måste ju rimligtvis listan innehålla (3,3,3) innan den sista loopen startas? Men hur kan det vara så när man inte ändrar listans innehåll i loop nr 2? Som du själv skriver ändrar man ju värdet på x, inte på list[0] osv.

Eftersom list[0] är en instans av en klass så får man inte en kopia av den när man sätter x till den, utan x refererar till originalinstansen ("pekar på" säger man ofta). Om man gör x.set(33) i första varvet så är det samma sak som om man hade gjort list[0].set(33).

Edit: tillägg: så jo, du har rätt i att listan är (3,3,3) före loop nr 3, och det är för att listan visst ändras i loop nr 2.

 Jahaa, då är jag med! Tack så hjärtligt!

Men du kanske undrar varför listans element inte har olika värden efter loop nr 2?

Matte357 132
Postad: 15 dec 2018
Laguna skrev:
Matte357 skrev:
Laguna skrev:
Matte357 skrev:
Laguna skrev:

for (Int x:list) måste betyda att x antar varje element i listan som värde, i tur och ordning. Först är x = list[0], sedan x = list[1] och till sist x = list[2].

Vad tyckte du själv att resultatet borde bli?

Problemet är att jag inte riktigt ser hur de två sista for-looparna hänger ihop med varandra. Om svaret ska bli "3 3 3" måste ju rimligtvis listan innehålla (3,3,3) innan den sista loopen startas? Men hur kan det vara så när man inte ändrar listans innehåll i loop nr 2? Som du själv skriver ändrar man ju värdet på x, inte på list[0] osv.

Eftersom list[0] är en instans av en klass så får man inte en kopia av den när man sätter x till den, utan x refererar till originalinstansen ("pekar på" säger man ofta). Om man gör x.set(33) i första varvet så är det samma sak som om man hade gjort list[0].set(33).

Edit: tillägg: så jo, du har rätt i att listan är (3,3,3) före loop nr 3, och det är för att listan visst ändras i loop nr 2.

 Jahaa, då är jag med! Tack så hjärtligt!

Men du kanske undrar varför listans element inte har olika värden efter loop nr 2?

 Ja... På ett känns det ju logiskt att det skulle bli (1,2,3). Är det för att listan från början är definierad på ett sådant sätt att den består av samma objekt (n)?

Laguna Online 2548
Postad: 15 dec 2018
Matte357 skrev:
Laguna skrev:
Matte357 skrev:
Laguna skrev:
Matte357 skrev:
Laguna skrev:

for (Int x:list) måste betyda att x antar varje element i listan som värde, i tur och ordning. Först är x = list[0], sedan x = list[1] och till sist x = list[2].

Vad tyckte du själv att resultatet borde bli?

Problemet är att jag inte riktigt ser hur de två sista for-looparna hänger ihop med varandra. Om svaret ska bli "3 3 3" måste ju rimligtvis listan innehålla (3,3,3) innan den sista loopen startas? Men hur kan det vara så när man inte ändrar listans innehåll i loop nr 2? Som du själv skriver ändrar man ju värdet på x, inte på list[0] osv.

Eftersom list[0] är en instans av en klass så får man inte en kopia av den när man sätter x till den, utan x refererar till originalinstansen ("pekar på" säger man ofta). Om man gör x.set(33) i första varvet så är det samma sak som om man hade gjort list[0].set(33).

Edit: tillägg: så jo, du har rätt i att listan är (3,3,3) före loop nr 3, och det är för att listan visst ändras i loop nr 2.

 Jahaa, då är jag med! Tack så hjärtligt!

Men du kanske undrar varför listans element inte har olika värden efter loop nr 2?

 Ja... På ett känns det ju logiskt att det skulle bli (1,2,3). Är det för att listan från början är definierad på ett sådant sätt att den består av samma objekt (n)?

Så är det. Det finns bara en instans av klassen Int i programmet, och alla tre element i listan pekar på den. Så i loop nr 2 ändras dess värde tre gånger och sista gången ändras det till 3.

Om man vill ha separata instanser i listan, så att det blir (1,2,3), så får man skriva list.add(new Int()) i loop nr 1.

adamcl 22
Postad: 15 dec 2018 Redigerad: 15 dec 2018

Jag vill bara inflika att for(Int x : list) är en for each-loop, som du kanske hört om tidigare. I en del språk skriver man for each, en del for x in y och i Java som ovan.

Svara Avbryt
Close