Survey
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
Föreläsning 4: Arrayer och loopar Camilla Kirkegaard [email protected] Department of Computer and Information Science (IDA) Linköpings universitet Sweden October 10, 2013 1 Innehåll n n Arrayer - att lagra mer än ett värde i taget Loopar - upprepning Department of Computer and Information Science (IDA) Linköpings universitet, Sweden October 10, 2013 2 Arrayer Department of Computer and Information Science (IDA) Linköpings universitet, Sweden October 10, 2013 3 Vad är en array? n n n (På svenska: vektor, OBS! inte detsamma som Javas Vector-klass!) Beräkna kostnaden för en order i en webbshop genom att först lagra antal och pris för varje typ av sak, sedan beräkna totalpris för ordern Okej... vi sätter igång... (anta att vi bara säljer 5 artiklar i vår webbshop) q q int antal1 = int antal2 = int antal3 = int antal4 = int antal5 = double pris1 double pris2 2; 3; 4; 5; 6;" = 20.0; = 30.0; ... Department of Computer and Information Science (IDA) Linköpings universitet, Sweden October 10, 2013 4 Vad är en array? (forts.) n Okej... vi sätter igång... (anta att vi bara säljer 5 artiklar i vår webbshop) q q n int antal1 = int antal2 = int antal3 = int antal4 = int antal5 = double pris1 double pris2 ... 2; 3; 4; 5; 6;" = 20.0; = 30.0; Beräkna totalkostnad... double kostnad = antal1 * pris1 + antal2 * pris2 ... ;" Department of Computer and Information Science (IDA) Linköpings universitet, Sweden October 10, 2013 5 Vad är en array? (forts.) Verkar inte det här lite osmidigt? Och vad händer om det finns fler än 5 artiklar i vår webbshop?? Vi vill ha ett sätt att skapa många variabler av samma typ, för lagring av samma typ av värden, på samma gång! n n 3.0 pris1 3.0 ... 23.50 23.50 pris pris2 Department of Computer and Information Science (IDA) Linköpings universitet, Sweden October 10, 2013 6 Vad är en array? (forts.) n Vi kan skapa en array för antal och en för pris! int[] antal = new int[5];" double[] pris = new double[5];" n n n [ ] efter den grundläggande datatypen i deklarationen anger att det är en array - alla värden måste vara av den typ som kommer före hakparentesen: int[] " "variabelnamnet" lagrar egentligen bara en referens till arrayen - inte själva arrayen (mer om referenser lite senare) vi måste ange hur stor arrayen ska vara - hur många "fack" den ska ha (går inte att ändra): int[5]" q new allokerar plats för varje element, vi måste göra detta innan vi kan använda arrayen - binda referensen till en konkret array n Men vi kan göra det i två steg: int[] antal; ... antal = new int[5];" Department of Computer and Information Science (IDA) Linköpings universitet, Sweden October 10, 2013 7 Vad är en array? (forts.) n Vi deklarerar en variabel som ska innehålla en referens till en array: int[] antal;" int[] antal n Vi allokerar platsen för värdena - skapar själva arrayen, och låter referensen peka på den: antal = new int[7];" int[] n antal Vi lagrar värden i "facken" - platsen anges genom arrayens index (OBS! börjar på 0): antal[0] = 3; 5 3 antal[3] = 5;" antal Department of Computer and Information Science (IDA) Linköpings universitet, Sweden October 10, 2013 int[] 8 Exempel class minarray { public static void main (String[] args) { int[] v1 = new int[3]; v1[0] = 2; v1[1] = 3; v1[2] = 4; int[] v2 = {1,2,3}; int[] v3 = v2; v2[0] = 5; v2[1] = v1[1]; System.out.println("Array 3 innehåller: " + v3[0] + " och " + v3[1] + " och " + v3[2]); } } Department of Computer and Information Science (IDA) Linköpings universitet, Sweden October 10, 2013 9 Exempel v1 int[] class minarray { public static void main (String[] args) { int[] v1 = new int[3]; v1[0] = 2; v1[1] = 3; v1[2] = 4; int[] v2 = {1,2,3}; int[] v3 = v2; v2[0] = 5; v2[1] = v1[1]; System.out.println("Array 3 innehåller: " + v3[0] + " och " + v3[1] + " och " + v3[2]); } } Department of Computer and Information Science (IDA) Linköpings universitet, Sweden October 10, 2013 10 Exempel v1 int[] class minarray { public static void main (String[] args) { int[] v1 = new int[3]; v1[0] = 2; v1[1] = 3; v1[2] = 4; int[] v2 = {1,2,3}; int[] v3 = v2; v2[0] = 5; v2[1] = v1[1]; System.out.println("Array 3 innehåller: " + v3[0] + " och " + v3[1] + " och " + v3[2]); } } Department of Computer and Information Science (IDA) Linköpings universitet, Sweden October 10, 2013 11 Exempel v1 int[] class minarray { public static void main (String[] args) { int[] v1 = new int[3]; v1[0] = 2; v1[1] = 3; v1[2] = 4; int[] v2 = {1,2,3}; int[] v3 = v2; v2[0] = 5; v2[1] = v1[1]; System.out.println("Array 3 innehåller: " + v3[0] + " och " + v3[1] + " och " + v3[2]); } } Department of Computer and Information Science (IDA) Linköpings universitet, Sweden October 10, 2013 12 Exempel v1 int[] class minarray { public static void main (String[] args) { int[] v1 = new int[3]; v1[0] = 2; v1[1] = 3; v1[2] = 4; int[] v2 = {1,2,3}; int[] v3 = v2; v2[0] = 5; v2[1] = v1[1]; System.out.println("Array 3 innehåller: " + v3[0] + " och " + v3[1] + " och " + v3[2]); } } Department of Computer and Information Science (IDA) Linköpings universitet, Sweden October 10, 2013 13 Exempel v1 int[] class minarray { public static void main (String[] args) { v2 int[] v1 = new int[3]; int[] v1[0] = 2; v1[1] = 3; v1[2] = 4; int[] v2 = {1,2,3}; int[] v3 = v2; v2[0] = 5; v2[1] = v1[1]; System.out.println("Array 3 innehåller: " + v3[0] + " och " + v3[1] + " och " + v3[2]); } } Department of Computer and Information Science (IDA) Linköpings universitet, Sweden October 10, 2013 14 Exempel v1 int[] class minarray { public static void main (String[] args) { v2 int[] v1 = new int[3]; int[] v1[0] = 2; v1[1] = 3; v1[2] = 4; int[] v2 = {1,2,3}; v3 int[] v3 = v2; int[] v2[0] = 5; v2[1] = v1[1]; System.out.println("Array 3 innehåller: " + v3[0] + " och " + v3[1] + " och " + v3[2]); } } Department of Computer and Information Science (IDA) Linköpings universitet, Sweden October 10, 2013 15 Exempel v1 int[] class minarray { public static void main (String[] args) { v2 int[] v1 = new int[3]; int[] v1[0] = 2; v1[1] = 3; v1[2] = 4; int[] v2 = {1,2,3}; v3 int[] v3 = v2; int[] v2[0] = 5; v2[1] = v1[1]; System.out.println("Array 3 innehåller: " + v3[0] + " och " + v3[1] + " och " + v3[2]); } } Department of Computer and Information Science (IDA) Linköpings universitet, Sweden October 10, 2013 16 Exempel v1 int[] class minarray { public static void main (String[] args) { v2 int[] v1 = new int[3]; int[] v1[0] = 2; v1[1] = 3; v1[2] = 4; int[] v2 = {1,2,3}; v3 int[] v3 = v2; int[] v2[0] = 5; v2[1] = v1[1]; System.out.println("Array 3 innehåller: " + v3[0] + " och " + v3[1] + " och " + v3[2]); } } Department of Computer and Information Science (IDA) Linköpings universitet, Sweden October 10, 2013 17 Exempel v1 int[] class minarray { public static void main (String[] args) { v2 int[] v1 = new int[3]; int[] v1[0] = 2; v1[1] = 3; v1[2] = 4; int[] v2 = {1,2,3}; v3 int[] v3 = v2; int[] v2[0] = 5; v2[1] = 3; System.out.println("Array 3 innehåller: " + v3[0] + " och " + v3[1] + " och " + v3[2]); } } Department of Computer and Information Science (IDA) Linköpings universitet, Sweden October 10, 2013 18 Exempel v1 int[] class minarray { public static void main (String[] args) { v2 int[] v1 = new int[3]; int[] v1[0] = 2; v1[1] = 3; v1[2] = 4; int[] v2 = {1,2,3}; v3 int[] v3 = v2; int[] v2[0] = 5; v2[1] = 3; System.out.println("Array 3 innehåller: " + v3[0] + " och " + v3[1] + " och " + v3[2]); } } Department of Computer and Information Science (IDA) Linköpings universitet, Sweden October 10, 2013 19 Exempel v1 int[] class minarray { public static void main (String[] args) { v2 int[] v1 = new int[3]; int[] v1[0] = 2; v1[1] = 3; v1[2] = 4; int[] v2 = {1,2,3}; v3 int[] v3 = v2; int[] v2[0] = 5; v2[1] = v1[1]; System.out.println("Array 3 innehåller: " + v3[0] + " och " + v3[1] + " och " + v3[2]); } } Department of Computer and Information Science (IDA) Linköpings universitet, Sweden October 10, 2013 20 Exempel v1 int[] class minarray { public static void main (String[] args) { v2 int[] v1 = new int[3]; int[] v1[0] = 2; v1[1] = 3; v1[2] = 4; int[] v2 = {1,2,3}; v3 int[] v3 = v2; int[] v2[0] = 5; v2[1] = v1[1]; System.out.println("Array 3 innehåller: " + 5 + " och " + 3 + " och " + 3); } } Department of Computer and Information Science (IDA) Linköpings universitet, Sweden October 10, 2013 21 Exempel v1 int[] class minarray { public static void main (String[] args) { v2 int[] v1 = new int[3]; int[] v1[0] = 2; v1[1] = 3; v1[2] = 4; int[] v2 = {1,2,3}; v3 int[] v3 = v2; int[] v2[0] = 5; v2[1] = v1[1]; System.out.println("Array 3 innehåller: " + 5 + " och " + 3 + " och " + 3); } } evabl45> Array 3 innehåller: 5 och 3 och 3 Department of Computer and Information Science (IDA) Linköpings universitet, Sweden October 10, 2013 22 Flerdimensionell array n Vi kan definiera "verktorer av arrayer", dvs en array där varje "fack" lagrar en array - dvs en matris! q n Vi kan ha hur många dimensioner som helst Tvådimensionell array - exempel q Representera följande matris: 2 3 4 3 4 5 Department of Computer and Information Science (IDA) Linköpings universitet, Sweden October 10, 2013 23 Matrisexempel class Matris { public static void main (String[] args) { int[][] m = new int[2][3]; m[0][0] = 2; //rad 0 element 0 m[0][1] = 3; //rad 0 element 1 m[0][2] = 4; //rad 0 element 2 m[1][0] = 3; //rad 1 element 0 m[1][1] = 4; //rad 1 element 1 m[1][2] = 5; //rad 1 element 2 } } Department of Computer and Information Science (IDA) Linköpings universitet, Sweden October 10, 2013 24 Matrisexempel m int[][] class Matris { public static void main (String[] args) { int[][] m = new int[2][3]; m[0][0] = 2; //rad 0 element 0 m[0][1] = 3; //rad 0 element 1 m[0][2] = 4; //rad 0 element 2 m[1][0] = 3; //rad 1 element 0 m[1][1] = 4; //rad 1 element 1 m[1][2] = 5; //rad 1 element 2 } } Department of Computer and Information Science (IDA) Linköpings universitet, Sweden October 10, 2013 25 Tillbaka till webbshoppen... n Löste detta vårt problem med webbshopen? Vi testar igen... först skapar vi variablerna för att lagra antal och pris: int[] antal = new int[5];" double[] pris = new double[5]; n Sen lägger vi in varje värde... antal[0] = 2; antal[1] = 3; antal[2] = 4; antal[3] = 5; antal[4] = 6;" pris[0] = 20.0; pris[1] = 30.0; ..." n Och beräknar totalkostnad... double kostnad = antal[0] * pris[0] + antal[1] * pris[1] ... ;" n Det verkar väl ok, men vad händer om vi har 100 artiklar i webbshopen? Department of Computer and Information Science (IDA) Linköpings universitet, Sweden October 10, 2013 26 Klassen java.util.Arrays n Arrays är en klass i Javas standardbibliotek (precis som String som vi sett tidigare) q n Klassen Arrays innehåller en del bra operationer för att hantera arrayer, t ex: q q q n Arrays finns i paketet java.util - vi måste ange dess fullständiga namn, inklusive paket, när vi vill komma åt klassen: java.util.Arrays (eller importera klassen, men vi återkommer till de senare...) equals(...) för att jämföra om alla element i två arrayer är lika fill(...) för att fylla en array med samma värde i alla positioner sort(...) för att sortera elementen i en array Läs mer om klassen och dess metoder i Javadoc för standardbiblioteket! Department of Computer and Information Science (IDA) Linköpings universitet, Sweden October 10, 2013 27 java.util.Arrays - Exempel n Fyll en array med 1:or... class minarrayEttor { public static void main (String[] args) { int[] a = new int[3]; java.util.Arrays.fill(a, 1); System.out.println("Arrayen innehåller: " + a[0] + " och " + a[1] + " och " + a[2]); } } Department of Computer and Information Science (IDA) Linköpings universitet, Sweden October 10, 2013 28 Upprepningar - Loopar Department of Computer and Information Science (IDA) Linköpings universitet, Sweden October 10, 2013 29 Upprepa så länge ett villkor gäller ingångsvillkor n while (villkor) gör; q villkoret testat för varje nytt varv av loopen påbörjas, om det är sant (true) körs ett varv till, om det är falskt (false) hoppar vi till nästa rad kod direkt efter loopen class Upprepa { public static void main (String[] args) { int tal = 3; while (tal >= 0) { System.out.println("Talet är: " + tal); tal = tal--; } System.out.println("Slut!"); } } October 10, 2013 30 Upprepa så länge ett villkor gäller ingångsvillkor class Upprepa { public static void main (String[] args) { int tal = 3; while (tal >= 0) { System.out.println("Talet är: " + tal); tal = tal--; } System.out.println("Slut!"); } } October 10, 2013 31 tal int Upprepa så länge ett villkor gäller ingångsvillkor class Upprepa { public static void main (String[] args) { int tal = 3; while (tal >= 0) { System.out.println("Talet är: " + tal); tal = tal--; } System.out.println("Slut!"); } } October 10, 2013 32 tal int Upprepa så länge ett villkor gäller ingångsvillkor class Upprepa { public static void main (String[] args) { int tal = 3; while (3 >= 0) { System.out.println("Talet är: " + tal); tal = tal--; } System.out.println("Slut!"); } } October 10, 2013 33 tal int Upprepa så länge ett villkor gäller ingångsvillkor class Upprepa { public static void main (String[] args) { int tal = 3; while (true) { System.out.println("Talet är: " + tal); tal = tal--; } System.out.println("Slut!"); } } October 10, 2013 34 tal int Upprepa så länge ett villkor gäller ingångsvillkor class Upprepa { public static void main (String[] args) { int tal = 3; while (true) { System.out.println("Talet är: " + tal); tal = tal--; } System.out.println("Slut!"); } } October 10, 2013 35 tal int Upprepa så länge ett villkor gäller ingångsvillkor class Upprepa { tal public static void main (String[] args) { int int tal = 3; while (tal >= 0) { System.out.println("Talet är: " + tal); tal = tal--; } System.out.println("Slut!"); evabl45> Talet är: 3 } } October 10, 2013 36 Upprepa så länge ett villkor gäller ingångsvillkor class Upprepa { tal public static void main (String[] args) { int int tal = 3; while (tal >= 0) { System.out.println("Talet är: " + tal); tal = tal--; } System.out.println("Slut!"); evabl45> Talet är: 3 } } October 10, 2013 37 Upprepa så länge ett villkor gäller ingångsvillkor class Upprepa { tal public static void main (String[] args) { int int tal = 3; while (tal >= 0) { System.out.println("Talet är: " + tal); tal = tal - 1; } System.out.println("Slut!"); evabl45> Talet är: 3 } } October 10, 2013 38 Upprepa så länge ett villkor gäller ingångsvillkor class Upprepa { tal public static void main (String[] args) { int int tal = 3; while (tal >= 0) { System.out.println("Talet är: " + tal); tal = 3 - 1; } System.out.println("Slut!"); evabl45> Talet är: 3 } } October 10, 2013 39 Upprepa så länge ett villkor gäller ingångsvillkor class Upprepa { tal public static void main (String[] args) { int int tal = 3; while (tal >= 0) { System.out.println("Talet är: " + tal); tal = 2; } System.out.println("Slut!"); evabl45> Talet är: 3 } } October 10, 2013 40 Upprepa så länge ett villkor gäller ingångsvillkor class Upprepa { tal public static void main (String[] args) { int int tal = 3; while (tal >= 0) { System.out.println("Talet är: " + tal); tal = tal--; } System.out.println("Slut!"); evabl45> Talet är: 3 } } October 10, 2013 41 Upprepa så länge ett villkor gäller ingångsvillkor class Upprepa { tal public static void main (String[] args) { int int tal = 3; while (tal >= 0) { System.out.println("Talet är: " + tal); tal = tal--; } System.out.println("Slut!"); evabl45> Talet är: 3 } } October 10, 2013 42 Upprepa så länge ett villkor gäller ingångsvillkor class Upprepa { tal public static void main (String[] args) { int int tal = 3; while (2 >= 0) { System.out.println("Talet är: " + tal); tal = tal--; } System.out.println("Slut!"); evabl45> Talet är: 3 } } October 10, 2013 43 Upprepa så länge ett villkor gäller ingångsvillkor class Upprepa { tal public static void main (String[] args) { int int tal = 3; while (true) { System.out.println("Talet är: " + tal); tal = tal--; } System.out.println("Slut!"); evabl45> Talet är: 3 } } October 10, 2013 44 Upprepa så länge ett villkor gäller ingångsvillkor class Upprepa { tal public static void main (String[] args) { int int tal = 3; while (tal >= 0) { System.out.println("Talet är: " + tal); tal = tal--; } System.out.println("Slut!"); evabl45> Talet är: 3 } evabl45> Talet är: 2 } October 10, 2013 45 Upprepa så länge ett villkor gäller ingångsvillkor class Upprepa { tal public static void main (String[] args) { int int tal = 3; while (tal >= 0) { System.out.println("Talet är: " + tal); tal = tal--; } System.out.println("Slut!"); evabl45> Talet är: 3 } evabl45> Talet är: 2 } October 10, 2013 46 Upprepa så länge ett villkor gäller ingångsvillkor class Upprepa { tal public static void main (String[] args) { int int tal = 3; while (1 >= 0) { System.out.println("Talet är: " + tal); tal = tal--; } System.out.println("Slut!"); evabl45> Talet är: 3 } evabl45> Talet är: 2 } October 10, 2013 47 Upprepa så länge ett villkor gäller ingångsvillkor class Upprepa { tal public static void main (String[] args) { int int tal = 3; while (tal >= 0) { System.out.println("Talet är: " + tal); tal = tal--; } System.out.println("Slut!"); evabl45> Talet är: 3 } evabl45> Talet är: 2 } evabl45> Talet är: 1 October 10, 2013 48 Upprepa så länge ett villkor gäller ingångsvillkor class Upprepa { tal public static void main (String[] args) { int int tal = 3; while (tal >= 0) { System.out.println("Talet är: " + tal); tal = tal--; } System.out.println("Slut!"); evabl45> Talet är: 3 } evabl45> Talet är: 2 } evabl45> Talet är: 1 October 10, 2013 49 Upprepa så länge ett villkor gäller ingångsvillkor class Upprepa { tal public static void main (String[] args) { int int tal = 3; while (tal >= 0) { System.out.println("Talet är: " + tal); tal = tal--; } System.out.println("Slut!"); evabl45> Talet är: 3 } evabl45> Talet är: 2 } evabl45> Talet är: 1 October 10, 2013 50 Upprepa så länge ett villkor gäller ingångsvillkor class Upprepa { tal public static void main (String[] args) { int int tal = 3; while (tal >= 0) { System.out.println("Talet är: " + tal); tal = tal--; } System.out.println("Slut!"); evabl45> Talet är: 3 } evabl45> Talet är: 2 } evabl45> Talet är: 1 evabl45> Talet är: 0 October 10, 2013 51 Upprepa så länge ett villkor gäller ingångsvillkor class Upprepa { tal public static void main (String[] args) { int int tal = 3; while (tal >= 0) { System.out.println("Talet är: " + tal); tal = tal--; } System.out.println("Slut!"); evabl45> Talet är: 3 } evabl45> Talet är: 2 } evabl45> Talet är: 1 evabl45> Talet är: 0 October 10, 2013 52 Upprepa så länge ett villkor gäller ingångsvillkor class Upprepa { tal public static void main (String[] args) { int int tal = 3; while (tal >= 0) { System.out.println("Talet är: " + tal); tal = tal--; } System.out.println("Slut!"); evabl45> Talet är: 3 } evabl45> Talet är: 2 } evabl45> Talet är: 1 evabl45> Talet är: 0 October 10, 2013 53 Upprepa så länge ett villkor gäller ingångsvillkor class Upprepa { tal public static void main (String[] args) { int int tal = 3; while (-1 >= 0) { System.out.println("Talet är: " + tal); tal = tal--; } System.out.println("Slut!"); evabl45> Talet är: 3 } evabl45> Talet är: 2 } evabl45> Talet är: 1 evabl45> Talet är: 0 October 10, 2013 54 Upprepa så länge ett villkor gäller ingångsvillkor class Upprepa { tal public static void main (String[] args) { int int tal = 3; while (false) { System.out.println("Talet är: " + tal); tal = tal--; } System.out.println("Slut!"); evabl45> Talet är: 3 } evabl45> Talet är: 2 } evabl45> Talet är: 1 evabl45> Talet är: 0 October 10, 2013 55 Upprepa så länge ett villkor gäller ingångsvillkor class Upprepa { tal public static void main (String[] args) { int int tal = 3; while (tal >= 0) { System.out.println("Talet är: " + tal); tal = tal--; } System.out.println("Slut!"); evabl45> Talet är: 3 } evabl45> Talet är: 2 } evabl45> Talet är: 1 October 10, 2013 56 evabl45> Talet är: 0 evabl45> Talet är: Slut! Upprepa så länge ett villkor gäller utgångsvillkor n do ... while (villkor); class Upprepa2 { public static void main (String[] args) { int tal = 3; do { System.out.println("Talet är: " + tal); tal = tal--; } while (tal >= 0); System.out.println("Slut!"); } } Department of Computer and Information Science (IDA) Linköpings universitet, Sweden October 10, 2013 57 Att tänka på med loopar n Oändlig loop - ett vanligt fel q q q Avsluta exekveringen (klicka på den röda ikonen, eller Ctrl-C om ni kör programmet från ett terminalfönster) Fundera på: Uppdateras variablerna i villkoret inifrån loopen? Exempel: " " " " " n "int tal = 3;" "while (tal >= 0)" "{" " System.out.println("Talet är: " + tal); " "}" Om en variabel skapas inne i loopen är det inte tillgänglig efter loopen - en ny variabel skapas varje varv q Normalt skapas variablerna innan loopen Department of Computer and Information Science (IDA) Linköpings universitet, Sweden October 10, 2013 58 Vad händer här? class Upprepa2 { public static void main (String[] args) { // int tal = 3; do { int tal = 3; System.out.println("Talet är: " + tal); tal = tal--; } while (tal >= 0); System.out.println("Slut!"); } } Department of Computer and Information Science (IDA) Linköpings universitet, Sweden October 10, 2013 59 Upprepa ett bestämt antal gånger class UpprepaExakt { public static void main (String[] args) { int rakna = 1; while (rakna <= 10) { System.out.println("Loopen körs gång nr " + rakna); rakna++; } System.out.println("Slut!"); } } Department of Computer and Information Science (IDA) Linköpings universitet, Sweden October 10, 2013 60 Upprepa ett bestämt antal gånger: for-loop class UpprepaFor { public static void main (String[] args) { for (int rakna = 1; rakna <= 10; rakna++) { System.out.println("Loopen körs gång nr " + rakna); } System.out.println("Slut!"); } } n For-loopens struktur: for (initiera variabel; slutvillkor; uppdatera variabel) q q q initiera variabel: vi kan deklarera en ny variabel eller initiera en vi redan har, här får variabeln det värde den ska börja på när loopens första varv körs slutvillkor: när villkoret är false avslutas loopen uppdatera variabel: hur ska variabeln uppdateras? (detta görs en gång per varv, innan villkoret testas igen, dvs "sist i loopen") Department of Computer and Information Science (IDA) Linköpings universitet, Sweden October 10, 2013 61 Exempel v1 int[] class minarray { public static void main (String[] args) Vi gör om exemplet { med loopar! int[] v1 = new int[3]; v1[0] = 2; v1[1] = 3; v1[2] = 4; int[] v2 = {1,2,3}; int[] v3 = v2; v2[0] = 5; v2[1] = v1[1]; System.out.println("Array 3 innehåller: " + v3[0] + " och " + v3[1] + " och " + v3[2]); } } Department of Computer and Information Science (IDA) Linköpings universitet, Sweden October 10, 2013 62 Exempel class minarray2 { public static void main (String[] args) { int[] v1 = new int[3]; int tal = 2; int position = 0; while (position < v1.length) { v1[position] = tal; tal ++; position ++; } int[] v2 = {1,2,3}; int[] v3 = v2; v2[0] = 5; v2[1] = v1[1]; System.out.print("Array 3 innehåller: ["); for (int i = 0; i < v3.length; i++){ System.out.print(" " + v3[i] + " "); } System.out.print(" ]"); } } Department of Computer and Information Science (IDA) Linköpings universitet, Sweden October 10, 2013 63 Exempel v1 class minarray2 { int[] public static void main (String[] args) { int[] v1 = new int[3]; int tal = 2; int position = 0; while (position < v1.length) { v1[position] = tal; tal ++; position ++; } int[] v2 = {1,2,3}; int[] v3 = v2; v2[0] = 5; v2[1] = v1[1]; System.out.print("Array 3 innehåller: ["); for (int i = 0; i < v3.length; i++){ System.out.print(" " + v3[i] + " "); } System.out.print(" ]"); } } Department of Computer and Information Science (IDA) Linköpings universitet, Sweden October 10, 2013 64 Exempel v1 class minarray2 { int[] public static void main (String[] args) { int[] v1 = new int[3]; int tal = 2; int position = 0; while (position < v1.length) { v1[position] = tal; tal ++; position ++; } int[] v2 = {1,2,3}; int[] v3 = v2; v2[0] = 5; v2[1] = v1[1]; System.out.print("Array 3 innehåller: ["); for (int i = 0; i < v3.length; i++){ System.out.print(" " + v3[i] + " "); } System.out.print(" ]"); } } tal Department of Computer and Information Science (IDA) Linköpings universitet, Sweden October 10, 2013 65 int Exempel v1 class minarray2 { int[] public static void main (String[] args) { int[] v1 = new int[3]; int tal = 2; int position = 0; while (position < v1.length) { v1[position] = tal; tal ++; position ++; } int[] v2 = {1,2,3}; int[] v3 = v2; v2[0] = 5; v2[1] = v1[1]; System.out.print("Array 3 innehåller: ["); for (int i = 0; i < v3.length; i++){ System.out.print(" " + v3[i] + " "); } System.out.print(" ]"); } } position tal Department of Computer and Information Science (IDA) Linköpings universitet, Sweden October 10, 2013 66 int int Exempel v1 class minarray2 { int[] public static void main (String[] args) { int[] v1 = new int[3]; int tal = 2; int position = 0; while (position < v1.length) { v1[position] = tal; tal ++; position ++; } int[] v2 = {1,2,3}; int[] v3 = v2; v2[0] = 5; v2[1] = v1[1]; System.out.print("Array 3 innehåller: ["); for (int i = 0; i < v3.length; i++){ System.out.print(" " + v3[i] + " "); } System.out.print(" ]"); } } position tal Department of Computer and Information Science (IDA) Linköpings universitet, Sweden October 10, 2013 67 int int Exempel v1 class minarray2 { int[] public static void main (String[] args) { int[] v1 = new int[3]; int tal = 2; int position = 0; while (0 < 3) { v1[position] = tal; tal ++; position ++; } int[] v2 = {1,2,3}; int[] v3 = v2; v2[0] = 5; v2[1] = v1[1]; System.out.print("Array 3 innehåller: ["); for (int i = 0; i < v3.length; i++){ System.out.print(" " + v3[i] + " "); } System.out.print(" ]"); } } position tal Department of Computer and Information Science (IDA) Linköpings universitet, Sweden October 10, 2013 68 int int Exempel v1 class minarray2 { int[] public static void main (String[] args) { int[] v1 = new int[3]; int tal = 2; int position = 0; while (position < v1.length) { v1[position] = tal; tal ++; position ++; } int[] v2 = {1,2,3}; int[] v3 = v2; v2[0] = 5; v2[1] = v1[1]; System.out.print("Array 3 innehåller: ["); for (int i = 0; i < v3.length; i++){ System.out.print(" " + v3[i] + " "); } System.out.print(" ]"); } } position tal Department of Computer and Information Science (IDA) Linköpings universitet, Sweden October 10, 2013 69 int int Exempel v1 class minarray2 { int[] public static void main (String[] args) { int[] v1 = new int[3]; int tal = 2; int position = 0; while (position < v1.length) { v1[0] = 2; tal ++; position ++; } int[] v2 = {1,2,3}; int[] v3 = v2; v2[0] = 5; v2[1] = v1[1]; System.out.print("Array 3 innehåller: ["); for (int i = 0; i < v3.length; i++){ System.out.print(" " + v3[i] + " "); } System.out.print(" ]"); } } position tal Department of Computer and Information Science (IDA) Linköpings universitet, Sweden October 10, 2013 70 int int Exempel v1 class minarray2 { int[] public static void main (String[] args) { int[] v1 = new int[3]; int tal = 2; int position = 0; while (position < v1.length) { v1[position] = tal; tal ++; position ++; } int[] v2 = {1,2,3}; int[] v3 = v2; v2[0] = 5; v2[1] = v1[1]; System.out.print("Array 3 innehåller: ["); for (int i = 0; i < v3.length; i++){ System.out.print(" " + v3[i] + " "); } System.out.print(" ]"); } } position tal Department of Computer and Information Science (IDA) Linköpings universitet, Sweden October 10, 2013 71 int int Exempel v1 class minarray2 { int[] public static void main (String[] args) { int[] v1 = new int[3]; int tal = 2; int position = 0; while (position < v1.length) { v1[position] = tal; tal ++; position ++; } int[] v2 = {1,2,3}; int[] v3 = v2; v2[0] = 5; v2[1] = v1[1]; System.out.print("Array 3 innehåller: ["); for (int i = 0; i < v3.length; i++){ System.out.print(" " + v3[i] + " "); } System.out.print(" ]"); } } position tal Department of Computer and Information Science (IDA) Linköpings universitet, Sweden October 10, 2013 72 int int Exempel v1 class minarray2 { int[] public static void main (String[] args) { int[] v1 = new int[3]; int tal = 2; int position = 0; while (position < v1.length) { v1[position] = tal; tal ++; position ++; } int[] v2 = {1,2,3}; int[] v3 = v2; v2[0] = 5; v2[1] = v1[1]; System.out.print("Array 3 innehåller: ["); for (int i = 0; i < v3.length; i++){ System.out.print(" " + v3[i] + " "); } System.out.print(" ]"); } } position tal Department of Computer and Information Science (IDA) Linköpings universitet, Sweden October 10, 2013 73 int int Exempel v1 class minarray2 { int[] public static void main (String[] args) { int[] v1 = new int[3]; int tal = 2; int position = 0; while (position < v1.length) { v1[position] = tal; tal ++; position ++; } int[] v2 = {1,2,3}; int[] v3 = v2; v2[0] = 5; v2[1] = v1[1]; System.out.print("Array 3 innehåller: ["); for (int i = 0; i < v3.length; i++){ System.out.print(" " + v3[i] + " "); } System.out.print(" ]"); } } position tal Department of Computer and Information Science (IDA) Linköpings universitet, Sweden October 10, 2013 74 int int Exempel v1 class minarray2 { int[] public static void main (String[] args) { int[] v1 = new int[3]; int tal = 2; int position = 0; while (position < v1.length) { v1[position] = tal; tal ++; position ++; } int[] v2 = {1,2,3}; int[] v3 = v2; v2[0] = 5; v2[1] = v1[1]; System.out.print("Array 3 innehåller: ["); for (int i = 0; i < v3.length; i++){ System.out.print(" " + v3[i] + " "); } System.out.print(" ]"); } } position tal Department of Computer and Information Science (IDA) Linköpings universitet, Sweden October 10, 2013 75 int int Exempel v1 class minarray2 { int[] public static void main (String[] args) { int[] v1 = new int[3]; int tal = 2; int position = 0; while (position < v1.length) { v1[position] = tal; tal ++; position ++; } int[] v2 = {1,2,3}; int[] v3 = v2; v2[0] = 5; v2[1] = v1[1]; System.out.print("Array 3 innehåller: ["); for (int i = 0; i < v3.length; i++){ System.out.print(" " + v3[i] + " "); } System.out.print(" ]"); } } position tal Department of Computer and Information Science (IDA) Linköpings universitet, Sweden October 10, 2013 76 int int Exempel v1 class minarray2 { int[] public static void main (String[] args) { int[] v1 = new int[3]; int tal = 2; int position = 0; while (position < v1.length) { v1[position] = tal; tal ++; position ++; } int[] v2 = {1,2,3}; int[] v3 = v2; v2[0] = 5; v2[1] = v1[1]; System.out.print("Array 3 innehåller: ["); for (int i = 0; i < v3.length; i++){ System.out.print(" " + v3[i] + " "); } System.out.print(" ]"); } } position tal Department of Computer and Information Science (IDA) Linköpings universitet, Sweden October 10, 2013 77 int int Exempel v1 class minarray2 { int[] public static void main (String[] args) { int[] v1 = new int[3]; int tal = 2; int position = 0; while (position < v1.length) { v1[position] = tal; tal ++; position ++; } int[] v2 = {1,2,3}; int[] v3 = v2; v2[0] = 5; v2[1] = v1[1]; System.out.print("Array 3 innehåller: ["); for (int i = 0; i < v3.length; i++){ System.out.print(" " + v3[i] + " "); } System.out.print(" ]"); } } position tal Department of Computer and Information Science (IDA) Linköpings universitet, Sweden October 10, 2013 78 int int Exempel v1 class minarray2 { int[] public static void main (String[] args) { int[] v1 = new int[3]; int tal = 2; int position = 0; while (position < v1.length) { v1[position] = tal; tal ++; position ++; } int[] v2 = {1,2,3}; int[] v3 = v2; v2[0] = 5; v2[1] = v1[1]; System.out.print("Array 3 innehåller: ["); for (int i = 0; i < v3.length; i++){ System.out.print(" " + v3[i] + " "); } System.out.print(" ]"); } } position tal Department of Computer and Information Science (IDA) Linköpings universitet, Sweden October 10, 2013 79 int int Exempel v1 class minarray2 { int[] public static void main (String[] args) { int[] v1 = new int[3]; int tal = 2; int position = 0; while (position < v1.length) { v1[position] = tal; tal ++; position ++; } int[] v2 = {1,2,3}; int[] v3 = v2; v2[0] = 5; v2[1] = v1[1]; System.out.print("Array 3 innehåller: ["); for (int i = 0; i < v3.length; i++){ System.out.print(" " + v3[i] + " "); } System.out.print(" ]"); } } position tal Department of Computer and Information Science (IDA) Linköpings universitet, Sweden October 10, 2013 80 int int Exempel v1 class minarray2 { int[] public static void main (String[] args) { int[] v1 = new int[3]; int tal = 2; int position = 0; while (position < v1.length) { v1[position] = tal; tal ++; position ++; } int[] v2 = {1,2,3}; int[] v3 = v2; v2[0] = 5; v2[1] = v1[1]; System.out.print("Array 3 innehåller: ["); for (int i = 0; i < v3.length; i++){ System.out.print(" " + v3[i] + " "); } System.out.print(" ]"); } } position tal Department of Computer and Information Science (IDA) Linköpings universitet, Sweden October 10, 2013 81 int int Exempel v1 class minarray2 { int[] public static void main (String[] args) { int[] v1 = new int[3]; int tal = 2; int position = 0; while (3 < 3) { v1[position] = tal; tal ++; position ++; } int[] v2 = {1,2,3}; int[] v3 = v2; v2[0] = 5; v2[1] = v1[1]; System.out.print("Array 3 innehåller: ["); for (int i = 0; i < v3.length; i++){ System.out.print(" " + v3[i] + " "); } System.out.print(" ]"); } } position tal Department of Computer and Information Science (IDA) Linköpings universitet, Sweden October 10, 2013 82 int int Exempel v1 class minarray2 { int[] public static void main (String[] args) { int[] v1 = new int[3]; int tal = 2; int position = 0; v2 while (position < v1.length) { int[] v1[position] = tal; tal ++; position ++; } int[] v2 = {1,2,3}; int[] v3 = v2; v2[0] = 5; v2[1] = v1[1]; System.out.print("Array 3 innehåller: ["); for (int i = 0; i < v3.length; i++){ System.out.print(" " + v3[i] + " "); } System.out.print(" ]"); } } position tal Department of Computer and Information Science (IDA) Linköpings universitet, Sweden October 10, 2013 83 int int Exempel v1 class minarray2 { int[] public static void main (String[] args) { int[] v1 = new int[3]; int tal = 2; int position = 0; v2 while (position < v1.length) { int[] v1[position] = tal; tal ++; position ++; } v3 int[] v2 = {1,2,3}; int[] int[] v3 = v2; v2[0] = 5; v2[1] = v1[1]; System.out.print("Array 3 innehåller: ["); for (int i = 0; i < v3.length; i++){ System.out.print(" " + v3[i] + " "); } System.out.print(" ]"); } } position tal Department of Computer and Information Science (IDA) Linköpings universitet, Sweden October 10, 2013 84 int int Exempel v1 class minarray2 { int[] public static void main (String[] args) { int[] v1 = new int[3]; int tal = 2; int position = 0; v2 while (position < v1.length) { int[] v1[position] = tal; tal ++; position ++; } v3 int[] v2 = {1,2,3}; int[] int[] v3 = v2; v2[0] = 5; v2[1] = v1[1]; System.out.print("Array 3 innehåller: ["); for (int i = 0; i < v3.length; i++){ System.out.print(" " + v3[i] + " "); } System.out.print(" ]"); } } position tal Department of Computer and Information Science (IDA) Linköpings universitet, Sweden October 10, 2013 85 int int Exempel v1 class minarray2 { int[] public static void main (String[] args) { int[] v1 = new int[3]; int tal = 2; int position = 0; v2 while (position < v1.length) { int[] v1[position] = tal; tal ++; position ++; } v3 int[] v2 = {1,2,3}; int[] int[] v3 = v2; v2[0] = 5; v2[1] = v1[1]; System.out.print("Array 3 innehåller: ["); for (int i = 0; i < v3.length; i++){ System.out.print(" " + v3[i] + " "); } System.out.print(" ]"); } } position tal Department of Computer and Information Science (IDA) Linköpings universitet, Sweden October 10, 2013 86 int int Exempel v1 class minarray2 { int[] public static void main (String[] args) { int[] v1 = new int[3]; int tal = 2; int position = 0; v2 while (position < v1.length) { int[] v1[position] = tal; tal ++; position ++; } v3 int[] v2 = {1,2,3}; int[] int[] v3 = v2; v2[0] = 5; v2[1] = v1[1]; System.out.print("Array 3 innehåller: ["); for (int i = 0; i < v3.length; i++){ System.out.print(" " + v3[i] + " "); } System.out.print(" ]"); } } position tal evabl45>Department Array 3ofinnehåller: [ Computer and Information Science (IDA) Linköpings universitet, Sweden October 10, 2013 87 int int Exempel v1 class minarray2 { int[] public static void main (String[] args) { int[] v1 = new int[3]; int tal = 2; int position = 0; v2 while (position < v1.length) { int[] v1[position] = tal; tal ++; position ++; } v3 int[] v2 = {1,2,3}; int[] int[] v3 = v2; v2[0] = 5; v2[1] = v1[1]; System.out.print("Array 3 innehåller: ["); for (int i = 0; i < v3.length; i++){ System.out.print(" " + v3[i] + " "); } System.out.print(" ]"); } } position tal evabl45>Department Array 3ofinnehåller: [ Computer and Information Science (IDA) Linköpings universitet, Sweden October 10, 2013 88 int int i int Exempel v1 class minarray2 { int[] public static void main (String[] args) { int[] v1 = new int[3]; int tal = 2; int position = 0; v2 while (position < v1.length) { int[] v1[position] = tal; tal ++; position ++; } v3 int[] v2 = {1,2,3}; int[] int[] v3 = v2; v2[0] = 5; v2[1] = v1[1]; System.out.print("Array 3 innehåller: ["); for (int i = 0; 0 < 3 ; i++){ System.out.print(" " + v3[i] + " "); } System.out.print(" ]"); } } position tal evabl45>Department Array 3ofinnehåller: [ Computer and Information Science (IDA) Linköpings universitet, Sweden October 10, 2013 89 int int i int Exempel v1 class minarray2 { int[] public static void main (String[] args) { int[] v1 = new int[3]; int tal = 2; int position = 0; v2 while (position < v1.length) { int[] v1[position] = tal; tal ++; position ++; } v3 int[] v2 = {1,2,3}; int[] int[] v3 = v2; v2[0] = 5; v2[1] = v1[1]; System.out.print("Array 3 innehåller: ["); for (int i = 0; true ; i++){ System.out.print(" " + v3[i] + " "); } System.out.print(" ]"); } } position tal evabl45>Department Array 3ofinnehåller: [ Computer and Information Science (IDA) Linköpings universitet, Sweden October 10, 2013 90 int int i int Exempel v1 class minarray2 { int[] public static void main (String[] args) { int[] v1 = new int[3]; int tal = 2; int position = 0; v2 while (position < v1.length) { int[] v1[position] = tal; tal ++; position ++; } v3 int[] v2 = {1,2,3}; int[] int[] v3 = v2; v2[0] = 5; v2[1] = v1[1]; System.out.print("Array 3 innehåller: ["); for (int i = 0; i < v3.length; i++){ System.out.print(" " + v3[i] + " "); } System.out.print(" ]"); } } position tal evabl45>Department Array 3ofinnehåller: [ 5 Science (IDA) Computer and Information Linköpings universitet, Sweden October 10, 2013 91 int int i int Exempel v1 class minarray2 { int[] public static void main (String[] args) { int[] v1 = new int[3]; int tal = 2; int position = 0; v2 while (position < v1.length) { int[] v1[position] = tal; tal ++; position ++; } v3 int[] v2 = {1,2,3}; int[] int[] v3 = v2; v2[0] = 5; v2[1] = v1[1]; System.out.print("Array 3 innehåller: ["); for (int i = 0; i < v3.length; i++){ System.out.print(" " + v3[i] + " "); } System.out.print(" ]"); } } position tal evabl45>Department Array 3ofinnehåller: [ 5 Science (IDA) Computer and Information Linköpings universitet, Sweden October 10, 2013 92 int int i int Exempel v1 class minarray2 { int[] public static void main (String[] args) { int[] v1 = new int[3]; int tal = 2; int position = 0; v2 while (position < v1.length) { int[] v1[position] = tal; tal ++; position ++; } v3 int[] v2 = {1,2,3}; int[] int[] v3 = v2; v2[0] = 5; v2[1] = v1[1]; System.out.print("Array 3 innehåller: ["); for (int i = 0; i < v3.length; i++){ System.out.print(" " + v3[i] + " "); } System.out.print(" ]"); } } position tal evabl45>Department Array 3ofinnehåller: [ 5 Science (IDA) Computer and Information Linköpings universitet, Sweden October 10, 2013 93 int int i int Exempel v1 class minarray2 { int[] public static void main (String[] args) { int[] v1 = new int[3]; int tal = 2; int position = 0; v2 while (position < v1.length) { int[] v1[position] = tal; tal ++; position ++; } v3 int[] v2 = {1,2,3}; int[] int[] v3 = v2; v2[0] = 5; v2[1] = v1[1]; System.out.print("Array 3 innehåller: ["); for (int i = 0; i < v3.length; i++){ System.out.print(" " + v3[i] + " "); } System.out.print(" ]"); } } position tal evabl45>Department Array 3ofinnehåller: [ 5 3 Science (IDA) Computer and Information Linköpings universitet, Sweden October 10, 2013 94 int int i int Exempel v1 class minarray2 { int[] public static void main (String[] args) { int[] v1 = new int[3]; int tal = 2; int position = 0; v2 while (position < v1.length) { int[] v1[position] = tal; tal ++; position ++; } v3 int[] v2 = {1,2,3}; int[] int[] v3 = v2; v2[0] = 5; v2[1] = v1[1]; System.out.print("Array 3 innehåller: ["); for (int i = 0; i < v3.length; i++){ System.out.print(" " + v3[i] + " "); } System.out.print(" ]"); } } position tal evabl45>Department Array 3ofinnehåller: [ 5 3 Science (IDA) Computer and Information Linköpings universitet, Sweden October 10, 2013 95 int int i int Exempel v1 class minarray2 { int[] public static void main (String[] args) { int[] v1 = new int[3]; int tal = 2; int position = 0; v2 while (position < v1.length) { int[] v1[position] = tal; tal ++; position ++; } v3 int[] v2 = {1,2,3}; int[] int[] v3 = v2; v2[0] = 5; v2[1] = v1[1]; System.out.print("Array 3 innehåller: ["); for (int i = 0; i < v3.length; i++){ System.out.print(" " + v3[i] + " "); } System.out.print(" ]"); } } position tal evabl45>Department Array 3ofinnehåller: [ 5 3 Science 3 Computer and Information (IDA) Linköpings universitet, Sweden October 10, 2013 96 int int i int Exempel v1 class minarray2 { int[] public static void main (String[] args) { int[] v1 = new int[3]; int tal = 2; int position = 0; v2 while (position < v1.length) { int[] v1[position] = tal; tal ++; position ++; } v3 int[] v2 = {1,2,3}; int[] int[] v3 = v2; v2[0] = 5; v2[1] = v1[1]; System.out.print("Array 3 innehåller: ["); for (int i = 0; i < v3.length; i++){ System.out.print(" " + v3[i] + " "); } System.out.print(" ]"); } } position tal evabl45>Department Array 3ofinnehåller: [ 5 3 Science 3 Computer and Information (IDA) Linköpings universitet, Sweden October 10, 2013 97 int int i int Exempel v1 class minarray2 { int[] public static void main (String[] args) { int[] v1 = new int[3]; int tal = 2; int position = 0; v2 while (position < v1.length) { int[] v1[position] = tal; tal ++; position ++; } v3 int[] v2 = {1,2,3}; int[] int[] v3 = v2; v2[0] = 5; v2[1] = v1[1]; System.out.print("Array 3 innehåller: ["); for (int i = 0; i < v3.length; i++){ System.out.print(" " + v3[i] + " "); } System.out.print(" ]"); } } position tal evabl45>Department Array 3ofinnehåller: [ 5 3 Science 3 ] (IDA) Computer and Information Linköpings universitet, Sweden October 10, 2013 98 int int i int Alternativ for-loop: for-each n Används när vi har en array, lista eller liknande och vill gå igenom den och göra något för varje element, t ex skriva ut värdet på elementet class minarray3 { public static void main (String[] args) { int[] ar = {1,2,3}; System.out.print("Arrayen innehåller: ["); for (int i : ar){ System.out.print(" " + i + " "); } System.out.print(" ]"); } } Department of Computer and Information Science (IDA) Linköpings universitet, Sweden October 10, 2013 99 Alternativ for-loop: for-each n Sturktur: for (elementtyp elementvariabel : arrayen) q q Utläses ungefär: för varje element elementvariabel, av typen elementtyp, i arrayen, gör... Exempel: for (int i : minarray) { //gör något med i } n Utläses: för varje element i, av typen heltal, som finns i minarray, gör... class minarray3 { public static void main (String[] args) { int[] ar = {1,2,3}; System.out.print("Arrayen innehåller: ["); for (int i : ar){ System.out.print(" " + i + " "); } System.out.print(" ]"); } } Department of Computer and Information Science (IDA) Linköpings universitet, Sweden October 10, 2013 100 Loop i loop - Exempel: Skriv ut matrisen class MatrisUtskrift { public static void main (String[] args) { int[][] m = new int[2][3]; m[0][0] = 2; //rad 0 element 0 m[0][1] = 3; //rad 0 element 1 m[0][2] = 4; //rad 0 element 2 m[1][0] = 3; //rad 1 element 0 m[1][1] = 4; //rad 1 element 1 m[1][2] = 5; //rad 1 element 2 int i = 0; //upprepa för varje rad i matrisen... while (i < m.length){ //upprepa för varje element i den aktuella raden... for (int j = 0; j < m[i].length; j++) System.out.print(m[i][j] + " "); System.out.println(); i++; } } } Department of Computer and Information Science (IDA) Linköpings universitet, Sweden October 10, 2013 101 Loop i loop - Exempel: Skriv ut matrisen med for-each class MatrisUtskrift2 { public static void main (String[] args) { int[][] m = new int[2][3]; m[0][0] = 2; //rad 0 element 0 m[0][1] = 3; //rad 0 element 1 m[0][2] = 4; //rad 0 element 2 m[1][0] = 3; //rad 1 element 0 m[1][1] = 4; //rad 1 element 1 m[1][2] = 5; //rad 1 element 2 //för varje rad i matrisen, dvs för varje int-array, int[], i m... for (int[] i : m){ //för varje element j av typen int i den aktuella raden... for (int j : i) System.out.print( j + " "); System.out.println(); } } } Department of Computer and Information Science (IDA) Linköpings universitet, Sweden October 10, 2013 102 Tillbaka till webbshoppen n Först skapar vi variablerna för att lagra antal och pris: int[] antal = new int[5];" double[] pris = new double[5]; n Sen lägger vi in varje värde genom två loopar: int i = 0;" while (i < antal.length) {" "antal[i] = i + 2; "i++;" }" i = 0;" while (i < pris.length) {" "pris[i] = antal[i] * 10; "i++;" }" n Och beräknar totalkostnad genom en loop int j = 0;" double totalpris = 0;" while (j < pris.length && j < antal.length) {" "totalpris = totalpris + (pris[j]*antal[j]);"" "j++;" }" " n Betydligt smidigare! Department of Computer and Information Science (IDA) Linköpings universitet, Sweden October 10, 2013 103 Avbryta en loop i förväg (inifrån loopen) class UpprepaExakt { public static void main (String[] args) { java.util.Scanner in = new java.util.Scanner(System.in); int tal = 0; int rakna = 1; while (rakna <= 10) { System.out.println("Loopen körs gång nr " + rakna); System.out.print("Skriv ett heltal: "); tal = in.nextInt(); System.out.println("Talet är: " + tal); if (tal == -1) break; rakna++; } System.out.println("Slut!"); } } Department of Computer and Information Science (IDA) Linköpings universitet, Sweden October 10, 2013 104 Hoppa direkt till nästa varv (inifrån loopen) class UpprepaExakt { public static void main (String[] args) { java.util.Scanner in = new java.util.Scanner(System.in); int tal = 0; int rakna = 1; while (rakna <= 10) { System.out.println("Loopen körs gång nr " + rakna); System.out.print("Skriv ett heltal: "); tal = in.nextInt(); if (tal == -1) continue; System.out.println("Talet är: " + tal); rakna++; } System.out.println("Slut!"); } } Department of Computer and Information Science (IDA) Linköpings universitet, Sweden October 10, 2013 105 Felsökning Department of Computer and Information Science (IDA) Linköpings universitet, Sweden October 10, 2013 106 Spårutskrifter n n Det är ofta svårt att veta vad som pågår under tiden som ett program exekveras Spårutskrifter = vi skriver ut värdet på viktiga variabler under exekveringens gång q Exempel: skriv ut värdet både på räknarvariabeln i en loop och övriga variabler vi "påverkar" inne i loopen Department of Computer and Information Science (IDA) Linköpings universitet, Sweden October 10, 2013 107 Kom ihåg: Exempel på for-loop class UpprepaFor { public static void main (String[] args) { for (int rakna = 1; rakna <= 10; rakna++) { System.out.println("Loopen körs gång nr " + rakna); } System.out.println("Slut!"); } } n Lägg gärna till den här typen av utskrifter även när det inte ingår i uppgiften, så att ni kan se på skärmen vad som händer när programmet körs! Department of Computer and Information Science (IDA) Linköpings universitet, Sweden October 10, 2013 108 Typiska fel under exekvering n Oändlig loop q q q n IndexOutOfBoundsException q q n Stoppa exekveringen (i Eclipse: röd knapp som visar att programmet körs, i terminalfönster: Ctrl-C) Lägg till spårutskrifter i loopen Lägg till ett extra villkor så att loopen avslutas efter ett fast antal gånger så att ni hinner med att läsa igenom spårutskrifterna Betyder att ni försöker komma åt ett index som ligger utanför arrayen eller listan ni har skapat Exempel: en array med 4 element och jag försöker hämta element med index 4 - finns inte (index är 0-3)! NullPointerException q q Betyder att ni försöker göra något med ett värde som inte finns, dvs inte är satt ännu Exempel: en variabel är inte initierad till ett värde men ni försöker utföra en operation på värdet av variabeln Department of Computer and Information Science (IDA) Linköpings universitet, Sweden October 10, 2013 109 Att läsa ett felmeddelande 1 class Matris 2{ 3 public static void main (String[] args) 4 { 5 int[][] m = new int[2][3]; 6 m[0][0] = 2; //rad 0 element 0 7 m[0][1] = 3; //rad 0 element 1 8 m[0][2] = 4; //rad 0 element 2 9 m[1][0] = 3; //rad 1 element 0 10 m[1][1] = 4; //rad 1 element 1 11 m[1][2] = 5; //rad 1 element 2 12 int i = 0; 13 while (i <= m.length){ 14 for (int j = 0; j < m[i].length; j++) 15 System.out.print(m[i][j] + " "); 16 System.out.println(); 17 i++; 18 } 19 } 20 } Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2 at Matris.main(Matris.java:15) Department of Computer and Information Science (IDA) Linköpings universitet, Sweden October 10, 2013 110 Klasser för listor och mängder Department of Computer and Information Science (IDA) Linköpings universitet, Sweden October 10, 2013 111 Listor och mängder - motivering och definitioner n n Det är inte alltid det är praktiskt att behöva bestämma storleken på lagringsutrymmet från början Visserligen kan vi bestämma storleken på en array när programmet körs, exempel - användaren matar in ett tal: ... int[] antal;" double[] pris;" java.util.Scanner in = new java.util.Scanner(System.in);" System.out.print("Ange antal olika varor: ")" int n = in.nextInt();" antal = new int[n];" int i = 0;" while (i < antal.length) {" "antal[i] = in.nextInt(); "i++;" }" ..." n Men... vi kan inte ändra oss när arrayen väl är skapad Department of Computer and Information Science (IDA) Linköpings universitet, Sweden October 10, 2013 112 Listor och mängder - motivering och definitioner (forts.) n n n Lista = en ordnad mängd med objekt (upprepning är ok) Mängd = inte ordnad, element förekommer bara en gång Listor och mängder finns som klasser i Javas stadardbibliotek q Exempel: ArrayList (java.util.ArrayList) n n n q Listklass som internt representerar listan som en array, men där storleken uppdateras efter behov Skapas genom följande uttryck (exempel med heltalselement): ArrayList<Integer> tallista = new ArrayList();" Finns metoder såsom "add" som lägger till ett element sist i listan, "get" som hämtar elementet på en viss position osv. Exempel: HashSet (java.util.HashSet) n n n Mängdklass som internt representerar mängden som en hashtabell Skapas genom följande uttryck (exempel med heltalselement): HashSet<Integer> talmangd = new HashSet();" Metoden "add" lägger till ett element om det inte redan finns Department of Computer and Information Science (IDA) Linköpings universitet, Sweden October 10, 2013 113 ArrayList - Exempel med for-each loop class ListaForEach { public static void main (String[] args) { java.util.ArrayList<Integer> tal = new java.util.ArrayList<Integer>(); for (int i = 1; i <= 10 ; i++) tal.add(i); for (int j : tal){ System.out.println("Talet är: " + j); } } } n OBS: typen på elementen måste vara en klass i Javas standardbibliotek q Vi återkommer till "wrapperklasser" lite senare, men ni måste skriva Integer istället för bara int när ni skapar en ArrayList Department of Computer and Information Science (IDA) Linköpings universitet, Sweden October 10, 2013 114 ArrayList - Exempel med iterator och while-loop class ListaIterator { public static void main (String[] args) { java.util.ArrayList<Integer> tal = new java.util.ArrayList<Integer> (); for (int i = 1; i <= 10 ; i++) tal.add(i); java.util.Iterator<Integer> taliterator = tal.iterator(); while (taliterator.hasNext()){ System.out.println("Talet är: " + taliterator.next()); } } } n En iterator har två viktiga metoder: hasNext() - returnerar ett booleskt värde, sant om det finns ett nästa element, och next() som returnerar nästa element Department of Computer and Information Science (IDA) Linköpings universitet, Sweden October 10, 2013 115 ArrayList - tips inför labben n För att lösa labbuppgiften behöver ni förmodligen mer information än såhär om klassen ArrayList och kanske fler exempel... q q ...en viktig del i den här kursen är att lära sig att läsa Javadoc för Javas standardbibliotek - börja alltid där! Behöver ni fler exempel: Googla! n n Väldigt få programmerare idag använder sig av läroböcker för att slå upp exempel, eftersom språken ändrar sig så fort - en lärobok blir gammal på bara ett par år! Vi vill att ni ska lära er att hitta aktuella exempel genom att googla eftersom det är så man oftast gör i "verkligheten" Department of Computer and Information Science (IDA) Linköpings universitet, Sweden October 10, 2013 116 Sammanfattning n Arrayer q q q q n Loopar - upprepning q q q q n Variabler som innehåller flera "fack" för värden av samma typ Arrayer har en förutbestämd längd - måste anges när den skapas och kan inte ändras Arrayer kan innehålla andra arrayer java.util.Arrays innehåller "bra-att-ha" metoder för arrayer while (villkor) { ... } do { ... } while (villkor) for (initialisering ; slutvillkor ; uppdatering) { ... } for (typ element : lista/mängd) { ... } Finns även färdiga klasser i Javas standardbibliotek för att hantera listor och mängder, t ex q ArrayList Department of Computer and Information Science (IDA) Linköpings universitet, Sweden October 10, 2013 117 Nästa gång n n Metoder - att dela upp programmet i delsteg Enkel inmatning - användaren får ange värden! Department of Computer and Information Science (IDA) Linköpings universitet, Sweden October 10, 2013 118 Department of Computer and Information Science (IDA) Linköpings universitet, Sweden October 10, 2013 119