Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 6 ( ) INNEHÅLL: -Mera om tabeller
2Jonny Karlsson Mera om tabeller Är en variant av referenstyp (arraytyp). Används för att lagra en mängd olika variabler av samma datatyp i datorns minne. Brukar även kallas för vektorer eller ”arrays” En tabell kan behövas när man vill göra ett program som skall beräkna t.ex. medeltalet av ett visst antal värden.
3Jonny Karlsson Mera om tabeller Deklaration av en tabell int [ ] a; eller int a [ ]; När man deklarerat en tabell enligt ovan kommer variabel a inte att innehålla en tabell utan egentligen en referens till en tabell. Referensvärdet är helt enkelt en adress som berättar var tabellen finns lagrad i datorns minne.
4Jonny Karlsson Mera om tabeller
5Jonny Karlsson Mera om tabeller Att ”skapa” en tabell Efter deklarationen innehållar variabeln a alltså en referens till den plats i minnet där en heltalstabell finns lagrad. Heltalstabellen har i detta skede ännu en ospecificerad längd. Nästa steg är att skapa själva tabellen, dvs att ge den en längd: a = new int[2]; Efter detta innehåller variabeln a fortfarande en referens till tabellen men tabellen (a) har fått en specifik längd, i detta fall 2.
6Jonny Karlsson Mera om tabeller
7Jonny Karlsson Mera om tabeller Detta är alltså skillnaden mellan primitiva datatyper (int, float, double...) och referenstyper (t.ex. Tabeller). Jämför följande två variabler: int a = 5; int b[ ] = new int[10]; - variabeln a innehåller värdet 5 - variabeln b innehåller en referens till den plats i minnet där heltalstabellen (b) finns lagrad.
8Jonny Karlsson Mera om tabeller Kompilera och kör följande kod och analysera vad som händer: public class test { static void modifieraTabell(int tabb[ ]) { tabb[0] = 44; } static void modifieraVariabel(int tal) { tal = 44; } public static void main(String args[ ]) { int tabb[ ] = new int[3], tal = 0; System.out.println(”Tal = ” + tal + ”\nTabellplats 0 = ” + tabb[0]); modifieraTabell(tabb); modifieraVariabel(tal); System.out.println(”Tal = ” + tal + ”\nTabellplats 0 = ” + tabb[0]); }
9Jonny Karlsson Mera om tabeller När du kör koden på föregående slide märker du kanske att variabeln tal inte byter värde efter anrop av modifieraVariabel medan första värdet i tabellen tabb byter värde efter anrop av modifieraTabell. VARFÖR? JO! I metoden modifieraVariabel är variabeln tal en kopia av variabeln tal i huvudmetoden. I modifieraVariabel tilldelar man variablen tal värdet 44. Men detta ändrar förstås inte på värdet av variabeln tal i huvudmetoden. I metoden modifieraTabell innehåller variablen tabb en referens till en minnesplats där det finns en heltalstabell. När man i metoden modifieraTabell säger: tabb[0] = 44; Betyder det att i den tabell som variabeln tabb refererar till skall man ställa in första värdet till 44. Variabeln tabb i huvudmetoden refererar till samma minnesplats som variabeln tabb i metoden modifieraTabell eftersom man gav referensvärdet som argument när man anropade modifieraTabell. Därför ändras värdet av tabb[0] också i Huvudmetoden. Att förstå detta är mycket värdefullt!!!