Download Föreläsning 4: Arrayer och loopar

Document related concepts
no text concepts found
Transcript
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