Föreläsning 11 Arrayer Arrayer Lagrar flera värden av samma typ Kan vara primitiva typer eller objekt int[] tal = new int[3]; Kan ha en array av t.ex: Heltal (int) Tecken (char) Personer (objekt av klassen Person) GeometriObjekt (Cirkel och Rektangel) Arrayer Array består av ett antal element Varje element lagrar ett värde av arrayens typ Varje element har ett index som avgör var i arrayen elementet finns tal[0] // första elementet, index 0 tal[1] // andra elementet, index 1 tal[2] // tredje elementet, index 2 En array med N element har 0 som första index och N-1 som sista 1
Deklarera och Skapa Array Arrayen heltal kan deklareras och skapas på följande sätt: int[] tal; // Deklarerar tal = new int[10]; // Skapar Eller så här: int[] tal = new int[10]; int tal[] = new int[10]; Arrayens namn är tal tal[0], tal[1],, tal[9] Arrayen innehåller 10 element av typen int Exempel På Olika Arrayer float[] priser = new float[500]; boolean[] flags; flags = new boolean[20]; char[] tecken = new char[1750]; int a = 33; double[] svar = new double[a + 67]; float[] priser2 = priser; Arrayer Är Objekt I java ses en array som ett objekt Instansierar en array med new Finns en medlemsvariabel (length) En variabel av typen array är en referensvariabel Används arrayer som parameter skickas referensen, inte elementen En array är dock inte en instans av klassen Array 2
Arrayer Element refereras med namnet på arrayen följt av dess index tal[4] representerar en plats att lagra ett heltal av typen int T.ex kan den: användas i en uträkning tilldelas ett värde jämföras skrivas ut tal[4] + 3; tal[4] = 3; if (tal[4] == 67){...}; System.out.println(tal[4]); Storleken på en Array En array har en fast storlek, som inte kan förändras Index som används för att referera ett element måste vara giltigt int tal[] = new int[10]; int i = 3; int j = 5; tal[4]; // Refererar till 5:e elementet tal[i]; // Refererar till 4:e elementet tal[i + j] // Refererar till 9:e elementet tal[j % i] // Refererar till 3:e elementet tal[4.4]; tal['4']; tal["4"]; tal[-1]; tal[10]; // Kan inte använda ett flyttal som index // Kan inte använda en char som index // Kan inte använda en String som index // Kan inte använda negativa tal som index // Kan inte använda tal större högsta index! Storleken på en Array Varje array har en publik konstant som kallas length Denna konstant innehåller storleken på arrayen (antal element) tal.length; // Rätt tal.length(); // Fel! length innehåller antalet element, inte det högsta index. tal.length == 10 // Sant tal.length == 9 // Falskt 3
En Array Av Objekt Elementen i en array kan vara referenser till ett objekt Deklarationen: Person[] familj = new Person[3]; reserverar utrymme för att lagra 3 referenser till Person-objekt Några Person-objekt skapas inte Varje objekt i arrayen måste instansieras var för sig En Array Av Personer Person[] familj = new Person[3]; familj[0] = new Person("Pappa Svensson", 33); familj[1] = new Person("Mamma Svensson", 31); familj[2] = new Person("Dotter Svensson", 8); Skapar 4 objekt null 1 array för att lagra Person-objekt 3 Person-objekt Arrayen används sen för att komma åt de enskilda elementen Notera! String namn1 = familj[0].getnamn(); familj[1].setnamn("svea Svensson"); familj[2].print(); familj När en array skapas, så skapas inte objekten som ska lagras i arrayen. 0 1 2 null null Initiering Av Arrayer En array kan ges värden när den skapas Omges av klamrar, separeras med komma Storleken på arrayen bestäms genom antalet initieringsvärden int[] tal = {79, 87, 94, 82, 67, 98, 87, 81}; // 8 element String[] ord = {"Hej", "Java", "Array", "Snö"}; // 4 element double[] tal = {1.21, 32.212, 0.02, 10.1, 0.0}; // 5 element String[] betygskala = {"IG", "G", "VG", "MVG"}; // 4 element Person[] f = {new Person("Pappa Svensson", 33), new Person("Mamma Svensson", 31), new Person("Dotter Svensson", 8)}; // 3 element 4
2D Arrayer En 2D-array är en array av arrayer Första arrayens storlek måste anges Den andra arrayen behöver inte vara av samma storlek int[][] array2d_1 = new int[10][10]; // 100 element totalt int[][] array2d_2 = new int[5][4]; // 20 element totalt int[][] array2d_3 = new int[2][]; // x element totalt array2d_3[0] = new int[5]; array2d_3[1] = new int[10]; Exempel på initiering int[][] i = { {0,1}, {1,2}, {2,3}, {3,4}, {4,5} }; Arrayer Som Parametrar En array kan skickas till en metod som en parameter int[] tal = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; add1(tal); public void add1(int[] t) {... } Det är referensen till arrayen som skickas Ändringar på ett element i metoden gör ändringar i originalet Arrayer som returvärde En metod kan även returnera en array av en viss typ int[] tal = skapaheltalsarray(); public int[] skapaheltalsarray() { int[] t = new int[10];... return t; } 5
Arrayer - Nackdelar Fast storlek Kan varken öka eller minska dynamiskt Kan endast lagra en typ av element Saknar användbara metoder Person[] familj = new Person[3]; familj[0] = new Person("Pappa Svensson", 33); familj[1] = new Person("Mamma Svensson", 31); familj[2] = new Person("Dotter Svensson", 8); familj[3] = new Person("Son Svensson", 14); //kan inte öka familj[2] = new Hund("Karo"); //fel typ 6