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
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 Arrayen innehåller 10 element av typen int tal[0], tal[1], …, tal[9]
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
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: tal[4] + 3; användas i en uträkning tal[4] = 3; tilldelas ett värde if (tal[4] == 67){...}; jämföras System.out.println(tal[4]); skrivas ut
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]; // Kan inte använda ett flyttal som index tal['4']; // Kan inte använda en char som index tal["4"]; // Kan inte använda en String som index tal[-1]; // Kan inte använda negativa tal som index tal[10]; // 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
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
När en array skapas, så skapas inte objekten som ska lagras i arrayen. En Array Av Personer familj 2 1 null 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 1 array för att lagra Person-objekt 3 Person-objekt Arrayen används sen för att ”komma åt” de enskilda elementen Notera! När en array skapas, så skapas inte objekten som ska lagras i arrayen. String namn1 = familj[0].getNamn(); familj[1].setNamn("Svea Svensson"); familj[2].print();
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
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; }
Arrayer - Nackdelar Fast storlek Kan endast lagra en typ av element 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