Skillnad mellan versioner av "Array av referenser"

Från Mathonline
Hoppa till: navigering, sök
m
m
 
(28 mellanliggande versioner av samma användare visas inte)
Rad 21: Rad 21:
  
  
= <b><span style="color:#931136">Klassen Fish</span></b> =
+
= <b><span style="color:#931136">Klassen Fisk</span></b> =
 
<div class="ovnE">
 
<div class="ovnE">
 
[[Image: Fish.jpg]]
 
[[Image: Fish.jpg]]
  
 
<big>
 
<big>
På <b><span style="color:green">rad 10</span></b> skapas arrayen med <b><span style="color:red">new</span></b>, liknande ett objekt. Adressen tilldelas referensen <b><span style="color:red">no</span></b>.
+
För enkelhetens skull deklareras klassens alla medlemmar som public. Därför definieras inte heller någon konstruktor.
  
På samma rad visar int[<b><span style="color:red">4</span></b>] att arrayen har <b><span style="color:red">4</span></b> element. Hakparentesen <b><span style="color:red">[ ]</span></b> anger här arrayens <b><span style="color:red">storlek</span></b>.
+
Typkonverteringen till <b><span style="color:red">int</span></b> behövs däför att returtypen till metoderna är <b><span style="color:red">int</span></b>.
  
 
På <b><span style="color:green">rad 26</span></b> överskrids arrayens övre indexgräns, eftersom no[<b><span style="color:red">4</span></b>] är arrayens <b><span style="color:red">5</span></b>:te element som är odefinierat.
 
På <b><span style="color:green">rad 26</span></b> överskrids arrayens övre indexgräns, eftersom no[<b><span style="color:red">4</span></b>] är arrayens <b><span style="color:red">5</span></b>:te element som är odefinierat.
 
Överskridning av arrayens indexgräns leder inte till kompilerings- utan till exekveringsfel.
 
 
<b><span style="color:red">foreach-satsen</span></b> i raderna <b><span style="color:green">15</span></b> och <b><span style="color:green">21</span></b> är en <b><span style="color:red">loop</span></b> som loopar igenom <b><span style="color:red">hela</span></b> arrayen: lämplig för arrays.
 
 
</big>
 
</big>
 
</div>
 
</div>
Rad 41: Rad 37:
 
= <b><span style="color:#931136">Programmet ArrayOfRef</span></b> =
 
= <b><span style="color:#931136">Programmet ArrayOfRef</span></b> =
 
<div class="ovnC">
 
<div class="ovnC">
[[Image: ArrayOfRef.jpg]]
+
[[Image: ArrayOfRefa.jpg]]
  
 
<big>
 
<big>
På <b><span style="color:green">rad 9</span></b> skapas arrayen. Storleken bestäms automatiskt av den kommaseparerade <b><span style="color:red">initieringslistan { ... }</span></b>.
+
På <b><span style="color:green">rad 7</span></b> skapas en array av 5 referenser: <b>f[0], f[1], ... , f[4]</b> av koden <b><span style="color:red">new Fisk[5]</span></b>.
 +
 
 +
<b>f</b> är ingen array av Fisk-objekt utan en <b><span style="color:red">array av</span> referenser <span style="color:red">av typ Fisk</span></b>.
 +
 
 +
Fisk-objekten skapas på <b><span style="color:green">rad 10</span></b> i <b>for</b>-loopen av koden <b><span style="color:red">new Fisk()</span></b>. I samma sats tilldelas de till referenserna <b>f[i]</b>.
 +
 
 +
Varje referens <b>f[i]</b> pekar nu på ett Fisk-objekt: &nbsp; <b>i = 0, 1, ... , 4</b> &nbsp; eftersom <b>for</b>-loopen har <b>5</b> varv.  
  
På <b><span style="color:green">rad 15</span></b> kopieras arrayens gamla referens <b><span style="color:red">no</span></b> till den nya referensen <b><span style="color:red">copy</span></b>. Arrayen kopieras inte.
+
Tanken om att skapa en "array av objekt" måste förkastas. Lösningen är en <b>tvåstegsmetod</b>:
  
Referenser lagrar minnesadresser med ett så litet minne som en int: 4 bytes.
+
<b>Steg 1:</b> &nbsp; <b><span style="color:red">Skapa en array av referenser</span></b>.
  
Efteråt kan man komma åt arrayen med båda referenser <b><span style="color:red">no</span></b> och <b><span style="color:red">copy</span></b>.
+
<b>Steg 2:</b> &nbsp; <b><span style="color:red">Låta varje referens i arrayen peka på ett objekt</span></b>.
 
</big>
 
</big>
 
</div>
 
</div>
Rad 61: Rad 63:
  
  
= <b><span style="color:#931136">Läs om Referensvariabler i kursboken på sid 88-91 och om Array av referenser på sid 113-116.</span></b> =
+
= <b><span style="color:#931136">Läs om Referensvariabler på sid 100-103 och om Array av referenser på sid 199-202.</span></b> =
  
  
Rad 87: Rad 89:
  
  
[[Matte:Copyrights|Copyright]] © 2021 [https://www.techpages.se <b><span style="color:blue">TechPages AB</span></b>]. All Rights Reserved.
+
[[Matte:Copyrights|Copyright]] © 2022 [https://www.techpages.se <b><span style="color:blue">TechPages AB</span></b>]. All Rights Reserved.

Nuvarande version från 28 januari 2022 kl. 08.47

       Lektion 20          Genomgång          Övningar      


Referensvariabler

Referensvariabler.jpg


Referensen "pekar" på objektet

Ref pekar Obja.jpg


Klassen Fisk

Fish.jpg

För enkelhetens skull deklareras klassens alla medlemmar som public. Därför definieras inte heller någon konstruktor.

Typkonverteringen till int behövs däför att returtypen till metoderna är int.

rad 26 överskrids arrayens övre indexgräns, eftersom no[4] är arrayens 5:te element som är odefinierat.


Programmet ArrayOfRef

ArrayOfRefa.jpg

rad 7 skapas en array av 5 referenser: f[0], f[1], ... , f[4] av koden new Fisk[5].

f är ingen array av Fisk-objekt utan en array av referenser av typ Fisk.

Fisk-objekten skapas på rad 10 i for-loopen av koden new Fisk(). I samma sats tilldelas de till referenserna f[i].

Varje referens f[i] pekar nu på ett Fisk-objekt:   i = 0, 1, ... , 4   eftersom for-loopen har 5 varv.

Tanken om att skapa en "array av objekt" måste förkastas. Lösningen är en tvåstegsmetod:

Steg 1:   Skapa en array av referenser.

Steg 2:   Låta varje referens i arrayen peka på ett objekt.


Ett körexempel

ArrayOfRefKorex.jpg


Läs om Referensvariabler på sid 100-103 och om Array av referenser på sid 199-202.


 










Copyright © 2022 TechPages AB. All Rights Reserved.