slides van 3de college

Inhoud
Syntax- (compile), runtime- en logische fouten
Binaire operatoren
I
I
I
Operaties op numerieke datatypen
Evaluatie van expressies, bindingssterkte
Assignment operaties en short-cut operatoren
Controle Statements
I
I
Herhaling met while en do-while loop
Selectie met switch statement
Arrays
Jose Lagerberg (UvA)
Inleiding Programmeren, College 3
8 september 2014
1 / 46
Syntaxfout bij compileren
/∗ Fout1 . j a v a ∗/
p u b l i c c l a s s Fout1 {
p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) {
int n = Integer . parseInt ( args [ 0 ] ) ;
System . o u t . p r i n t l n ( n ) ;
}
]
% j a v a c Fout1 . j a v a
Fout1 . j a v a : 7 : i l l e g a l s t a r t o f t y p e
]
ˆ
Fout1 . j a v a : 7 : r e a c h e d end o f f i l e w h i l e p a r s i n g
]
ˆ
2 errors
Jose Lagerberg (UvA)
Inleiding Programmeren, College 3
8 september 2014
2 / 46
Fouten bij compileren
/∗ Fout2 . j a v a ∗/
p u b l i c c l a s s Fout1 {
p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) {
int n = Integer . parseInt ( args [ 0 ] ) ;
System . o u t . p r i n t l n ( n ) ;
}
}
% j a v a c Fout2 . j a v a
Fout2 . j a v a : 2 : c l a s s Fout1 i s p u b l i c , s h o u l d be d e c l a r e d i n a
f i l e named Fout1 . j a v a
p u b l i c c l a s s Fout1 {
ˆ
1 error
Jose Lagerberg (UvA)
Inleiding Programmeren, College 3
8 september 2014
3 / 46
Fouten bij compileren
/∗ Fout3 . j a v a ∗/
p u b l i c c l a s s Fout3 {
p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) {
int n = Integer . parseInt ( args [ 0 ] ) ;
System . o u t . p r i n t l n ( n )
}
}
% j a v a c Fout3 . j a v a
Fout3 . j a v a : 5 : ’ ; ’ e x p e c t e d
System . o u t . p r i n t l n ( n )
ˆ
1 error
Jose Lagerberg (UvA)
Inleiding Programmeren, College 3
8 september 2014
4 / 46
Fouten bij compileren
/∗ Fout4 . j a v a ∗/
p u b l i c c l a s s Fout4 {
p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) {
int n = n + 1;
System . o u t . p r i n t l n ( n ) ;
}
}
% j a v a c Fout4 . j a v a
Fout4 . j a v a : 4 : v a r i a b l e n m i g h t n o t h a v e been i n i t i a l i z e d
int n = n + 1;
ˆ
1 error
Jose Lagerberg (UvA)
Inleiding Programmeren, College 3
8 september 2014
5 / 46
Te grote double
p u b l i c c l a s s Fout5 {
p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) {
int a = 6;
dou b l e d ;
i f ( ! a > 0)
System . o u t . p r i n t l n ( a + ” i s > 0 ” ) ;
i f ( a = 2)
System . o u t . p r i n t l n ( a + ” i s 2 ” ) ;
d = 1 . 2 e +345;
System . o u t . p r i n t l n ( d ) ;
}
}
% j a v a c Fout5 . j a v a
Fout5 . j a v a : 1 0 : f l o a t i n g p o i n t number t o o l a r g e
d = 1 . 2 e +345;
ˆ
1 error
Jose Lagerberg (UvA)
Inleiding Programmeren, College 3
8 september 2014
6 / 46
Twee syntax fouten
p u b l i c c l a s s Fout5 {
p u b l i c s t a t i c v o i d main ( S t r i n g [ ]
i n t a = 6 ; d o uble d ;
i f ( ! a > 0)
System . o u t . p r i n t l n ( a + ”
i f ( a = 2)
System . o u t . p r i n t l n ( a + ”
// d = 1 . 2 e +345; // System . o u t .
} }
args ) {
i s > 0” ) ;
i s 2” ) ;
println (d );
% j a v a c Fout5 . j a v a
Fout5 . j a v a : 6 : o p e r a t o r ! c a n n o t be a p p l i e d t o i n t
i f ( ! a > 0)
ˆ
Fout5 . j a v a : 8 : i n c o m p a t i b l e t y p e s
found
: int
required : boolean
i f ( a = 2)
ˆ
2 errors
Jose Lagerberg (UvA)
Inleiding Programmeren, College 3
8 september 2014
7 / 46
Fouten bij runnen
/∗ Fout6 . j a v a ∗/
p u b l i c c l a s s Fout6 {
p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) {
System . o u t . p r i n t l n ( 1 / 0 ) ;
}
}
% j a v a Fout6
E x c e p t i o n i n t h r e a d ” main ” j a v a . l a n g . A r i t h m e t i c E x c e p t i o n :
/ by z e r o
a t Fout6 . main ( Fout6 . j a v a : 4 )
Jose Lagerberg (UvA)
Inleiding Programmeren, College 3
8 september 2014
8 / 46
Fouten bij runnen
p u b l i c c l a s s TestArgument {
p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) {
String a ;
a = a r g s [ 0 ] ; // 1 s t e argument
System . o u t . p r i n t l n ( ” a i s ” + a ) ;
}
}
% j a v a TestArgument
E x c e p t i o n i n t h r e a d ” main ” j a v a . l a n g . A r r a y I n d e x O u t O f B o u n d s E x c e p t
a t TestArgument . main ( TestArgument . j a v a : 4 )
Jose Lagerberg (UvA)
Inleiding Programmeren, College 3
8 september 2014
9 / 46
Logische fout
import j a v a . u t i l . ∗ ;
p u b l i c c l a s s Fout7 {
p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) {
S c a n n e r i n p u t = new S c a n n e r ( System . i n ) ;
System . o u t . p r i n t ( ” G e e f t e m p e r a t u u r i n g r a d e n C e l s i u s ” ) ;
i n t tempC = i n p u t . n e x t I n t ( ) ;
i n t tempF = 9 / 5 ∗ tempC + 3 2 ;
System . o u t . p r i n t ( ” Temperatuur i n g r a d e n F a h r e n h e i t ” ) ;
System . o u t . p r i n t l n ( tempF ) ;
}
}
G e e f t e m p e r a t u u r i n g r a d e n C e l s i u s 35
Te mperatuur i n g r a d e n F a h r e n h e i t 67
Jose Lagerberg (UvA)
Inleiding Programmeren, College 3
8 september 2014
10 / 46
Tweeplaatsige (binaire) operatoren op getallen
Voorgedefinieerde binaire operatoren op getallen:
operator
verschil
optelling
vermenigvuldiging
deling
rest-bij-deling
+
*
/
%
argument types
getallen
getallen
getallen
getallen
getallen
resultaat type
getal
getal
getal
getal
getal
Machtsverheffen is bijvoorbeeld geen voorgedefinieerde operatie. Bij het
practicum definieer je deze operatie in termen van de voorgedefinieerde
operaties.
Jose Lagerberg (UvA)
Inleiding Programmeren, College 3
8 september 2014
11 / 46
Operaties op getallen en typeconversie (1)
bij operaties ordening op de primitive datatypes:
byte < s h o r t < i n t < l o n g ? f l o a t < double
Wanneer argumenten van operatie van verschillende types, wordt
argument kleinste type bij evaluatie geconverteerd naar grotere type,
maar altijd tenminste naar int
Er wordt gerekend in int’s !!!!!!!!!!!!!
Voorbeeld:
13 / 4
= 3
13 / 4 . 0 = 3 . 2 5
Jose Lagerberg (UvA)
13 % 4
= 1
13 % 4 . 0 = 1 . 0
Inleiding Programmeren, College 3
8 september 2014
12 / 46
Operaties op getallen en typeconversie (2)
byte b = 2 0 ;
System . o u t . p r i n t l n ( b ∗ b ) ;
System . o u t . p r i n t l n ( ( byte ) ( b ∗ b ) ) ;
// 400
// −112
i n t intMax = I n t e g e r . MAX VALUE ;
// 2 , 1 4 7 , 4 8 3 , 6 4 7
System . o u t . p r i n t l n ( intMax + 1 ) ;
// −2 ,147 ,483 ,648
System . o u t . p r i n t l n ( ( l o n g ) intMax + 1 ) ; // 2 , 1 4 7 , 4 8 3 , 6 4 8
// 3 . 4 0 2 8 2 3 5 E38
f l o a t fMax = F l o a t . MAX VALUE ;
System . o u t . p r i n t l n ( 1 0 0 ∗ fMax ) ;
// I n f i n i t y
System . o u t . p r i n t l n ( 1 0 0 ∗ ( double ) fMax ) ; // 3 . 4 0 2 8 2 3 4 6 6 3 8 5 2 8 8 6 E40
Jose Lagerberg (UvA)
Inleiding Programmeren, College 3
8 september 2014
13 / 46
Evaluatie van expressies: volgorde (1)
Hoe verloopt, stap-voor-stap, de evaluatie van een expressie? Voorbeeld:
stel a = 10, b = 5, en c = 25.
=>
=>
=>
=>
=>
! ( ( a > b ) | | ( c <= a ) )
! ( ( true ) | | ( f a l s e ))
! ( true | | f a l s e )
! ( true )
! true
false
Eerste regel: innermost first. De argumenten van een operator moeten
worden ge¨evalueerd voordat de waarde van de operatie bepaald kan
worden.
Haakjes geven structuur aan.
Jose Lagerberg (UvA)
Inleiding Programmeren, College 3
8 september 2014
14 / 46
Evaluatie van expressies: volgorde (2)
Wanneer meerdere operaties zonder haakjes, geldt de regel:
Links naar rechts, hoogste prioriteit eerst
Prioriteit wordt bepaald door bindingssterkte
7 + 2 − 6 ∗ 1 / 3 − 4 /
=>
9
− 6 ∗ 1 / 3 − 4 /
=>
9
−
6
/ 3 − 4 /
=>
9
−
2
− 4 /
=>
7
− 4 /
=>
7
− −2
=>
9
Jose Lagerberg (UvA)
−2
−2
−2
−2
−2
Inleiding Programmeren, College 3
8 september 2014
15 / 46
Bindingssterkte
Een ordening voor de operaties die we tot nu toe gezien hebben:
15 14 13 12 11 10
9
8
7 6 5 4
3 2 1
=======================================================
+ (t) ∗
+
<
==
&& | |
=
−
/
−
<=
!=
!
%
>
un .
>=
Voorbeeld: de structuur van
a ∗ b + c == −a / b && ! d
is
Jose Lagerberg (UvA)
(a ∗ b) + c == ((−a)/b) &&(!d)
Inleiding Programmeren, College 3
8 september 2014
16 / 46
Assignment operatie
De assignment statement
i = j = k = 1;
is equivalent met
k = 1;
j = k;
i = j;
Jose Lagerberg (UvA)
Inleiding Programmeren, College 3
8 september 2014
17 / 46
Meer assignment operaties
Voor een variabele v en expressie E de volgende short-cut operatoren:
v
v
v
v
v
∗=
/=
%=
+=
−=
E
E
E
E
E
v
v
v
v
v
=
=
=
=
=
v
v
v
v
v
∗
/
%
+
−
E
E
E
E
E
Dit zijn afkortingen
Voorbeelden
Laat a = 2, b = 3, en n = 10
n ∗= a + b ; b e t e k e n t n = n ∗ ( a + b ) ; // 50
n ∗= a += b ; b e t e k e n t a = a + b ; n = n ∗ a ;
// 50
a = b += c ∗= −d b e t e k e n t c = c ∗ −d ; b = b + c ; a = b ;
Jose Lagerberg (UvA)
Inleiding Programmeren, College 3
8 september 2014
18 / 46
Post- en pre- increment/decrement operatoren
Nog twee short-cut operatoren: increment (++) en decrement (--)
Increment: hoog het argument op met 1
Decrement: verlaag het argument met 1
Plaatsing ten opzichte van argument: ervoor (prefix) of erachter
(suffix)
Plaatsing kan gevolgen hebben voor de evaluatie van expressies
waarin deze operaties voorkomen
n++
n−−
++n
−−n
//
//
//
//
post increment
post decrement
pre increment
pre decrement
Jose Lagerberg (UvA)
Inleiding Programmeren, College 3
8 september 2014
19 / 46
Increment/decrement
Bij gebruik als assignment statement maakt de plaatsing niet uit:
i++; en ++i; hebben beiden hetzelfde effect als i = i + 1;
Bij gebruik in assignment expressie:
I
I
Prefix: eerst ++n; dan evaluatie van expressie
Suffix: eerst evaluatie van expressie, dan n++
v = ++n + 1 ; i s eq . met n = n + 1 ; v = n + 1 ;
v = n++ + 1 ; i s eq . met v = n + 1 ; n = n + 1 ;
Voorbeeld (k krijgt waarde 50)
i n t i = 10;
i n t k = 5 ∗ i ++;
i n t i = 10;
int k = 5 ∗ i ;
i = i + 1;
Voorbeeld (k krijgt waarde 55)
i n t i = 10;
i n t k = 5 ∗ ++i ;
Jose Lagerberg (UvA)
i n t i = 10;
i = i + 1;
int k = 5 ∗ i ;
Inleiding Programmeren, College 3
8 september 2014
20 / 46
Side effect van short-circuit operatoren && en ||
c l a s s Example {
p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) {
int i = 0;
bo o l e a n c o n d i t i o n = f a l s e ;
i f ( c o n d i t i o n & (++ i < 1 0 0 ) )
System . o u t . p r i n t l n ( ” t h i s won ’ t be d i s p l a y e d ” ) ;
System . o u t . p r i n t l n ( ” i i s : ” + i ) ; // i i n c r e m e n t e d
i f ( c o n d i t i o n && (++ i < 1 0 0 ) )
System . o u t . p r i n t l n ( ” t h i s won ’ t be d i s p l a y e d ” ) ;
System . o u t . p r i n t l n ( ” i
i s : ” + i ) ; // i n o t i n c r e m e n t e d
}
}
i
i
is : 1
is : 1
Jose Lagerberg (UvA)
Inleiding Programmeren, College 3
8 september 2014
21 / 46
Verkorte operatoren &= en |=
int m = 1;
b o o l e an b = t r u e ;
System . o u t . p r i n t l n ( ”b i s ” + b + ” en m i s ” + m) ;
b = b | | (m++ > 1 ) ;
System . o u t . p r i n t l n ( ”b i s ” + b + ” en m i s ” + m) ;
b = b | (m++ > 1 ) ;
System . o u t . p r i n t l n ( ”b i s ” + b + ” en m i s ” + m) ;
b |= (m++ > 1 ) ;
System . o u t . p r i n t l n ( ”b i s ” + b + ” en m i s ” + m) ;
b
b
b
b
is
is
is
is
true
true
true
true
en
en
en
en
m
m
m
m
Jose Lagerberg (UvA)
is
is
is
is
1
1
2
3
Inleiding Programmeren, College 3
8 september 2014
22 / 46
Block statement en scope van variabele
Samengesteld statement (block):
{
...
}
Nul of meer statements tussen accolades
Opmerking Let op:
{
int k;
}
k = 1;
{
int k;
int k = 1;
}
leveren beiden foutmelding
Jose Lagerberg (UvA)
Inleiding Programmeren, College 3
8 september 2014
23 / 46
Voorbeeld 1
p u b l i c c l a s s Test1 {
p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) {
{
int k ;
}
k = 1;
}
}
% j a v a c Test1 . j a v a
Test1 . j a v a : 6 : cannot f i n d symbol
symbol
: variable k
l o c a t i o n : c l a s s Test1
k = 1;
ˆ
1 error
Jose Lagerberg (UvA)
Inleiding Programmeren, College 3
8 september 2014
24 / 46
Voorbeeld 2
p u b l i c c l a s s Test2 {
p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) {
int k ;
int k = 1;
}
}
% j a v a c Test2 . j a v a
T e s t 2 . j a v a : 4 : k i s a l r e a d y d e f i n e d i n main ( j a v a . l a n g . S t r i n g [ ] )
int k = 1;
ˆ
1 error
Jose Lagerberg (UvA)
Inleiding Programmeren, College 3
8 september 2014
25 / 46
Herhaling met while loop
public class TestDeler {
p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) {
int x , i ;
x = Integer . parseInt ( args [ 0 ] ) ;
i = 2;
while ( i < x ) {
i f ( x % i == 0 )
System . o u t . p r i n t l n ( ” e e n d e l e r i s : ” + i ) ;
i = i + 1;
}
}
}
% j a v a T e s t D e l e r 93
een d e l e r i s : 3
e e n d e l e r i s : 31
Jose Lagerberg (UvA)
Inleiding Programmeren, College 3
8 september 2014
26 / 46
While loop met foute conditie
public c l a s s TestWhile {
p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) {
bo o l e a n b = f a l s e ;
i n t ans = 3 ;
do {
System . o u t . p r i n t l n ( a n s ) ;
ans = ans + 1 ;
}
while (b = true ) ;
}
}
% java TestWhile
0
1
2
...
Jose Lagerberg (UvA)
Inleiding Programmeren, College 3
8 september 2014
27 / 46
while en do while
while: (nul of meer keer uitgevoerd)
i n t count = 0;
while ( count < 5) {
System . o u t . p r i n t l n ( ”We z i j n
c o u n t ++;
}
b i j : ” + count ) ;
do-while: (tenminste ´e´en keer uitgevoerd)
i n t count = 0;
do {
System . o u t . p r i n t l n ( ”We z i j n
c o u n t ++;
} while ( count < 5 ) ;
Jose Lagerberg (UvA)
b i j : ” + count ) ;
Inleiding Programmeren, College 3
8 september 2014
28 / 46
Meervoudige selectie statements: switch
Type van expression is char, byte, short, of int
switch ( e x p r e s s i o n ) {
c a s e v a l u e 1 : b l o c k 1 break ;
c a s e v a l u e 2 : b l o c k 2 break ;
...
c a s e v a l u e N : b l o c k N break ;
d e f a u l t : d e f a u l t B l o c k break ;
}
switch ( a a n t a l ) {
c a s e 0 : System . o u t . p r i n t l n ( ” n u l ” ) ; break ;
c a s e 1 : System . o u t . p r i n t l n ( ” e e n ” ) ; break ;
d e f a u l t : System . o u t . p r i n t l n ( ” v e e l ” ) ; break ;
}
Jose Lagerberg (UvA)
Inleiding Programmeren, College 3
8 september 2014
29 / 46
Meervoudige selectie statements: switch
break is optioneel:
int aantal = 1;
switch ( a a n t a l ) {
c a s e 0 : System . o u t . p r i n t l n ( ” n u l ” ) ;
c a s e 1 : System . o u t . p r i n t l n ( ” e e n ” ) ;
c a s e 2 : System . o u t . p r i n t l n ( ” twee ” ) ;
d e f a u l t : System . o u t . p r i n t l n ( ” v e e l ” ) ;
}
Uitvoer:
een
twee
veel
Jose Lagerberg (UvA)
Inleiding Programmeren, College 3
8 september 2014
30 / 46
Voorbeeld switch
int aantal = 2;
switch ( a a n t a l ) {
c a s e 0 : System . o u t . p r i n t l n ( ” n u l ” ) ; break ;
c a s e 1 : System . o u t . p r i n t l n ( ” e e n ” ) ; break ;
case 2 : case 3 : case 4 :
System . o u t . p r i n t l n ( ” meer dan 1 maar m i n d e r dan 5 ” ) ;
break ;
d e f a u l t : System . o u t . p r i n t l n ( ” meer dan 4 ” ) ; break ;
}
meer dan 1 maar m i n d e r dan 5
Jose Lagerberg (UvA)
Inleiding Programmeren, College 3
8 september 2014
31 / 46
Beschrijving probleem
Gebaseerd op Introduction to Computer Science and Programming van
MIT gegeven door prof. Eric Grimson en prof. John Guttag, MIT course
number 6.00.
Licentie:
http://creativecommons.org/licenses/by-nc-sa/3.0/nl/
Gegeven:
Boer met kippen en varkens ziet op zijn erf 20 koppen en 56 poten.
Vraag: Hoeveel kippen en hoeveel varkens?
Oplossing: 2 lineaire vergelijkingen met 2 onbekenden
x is aantal kippen, y is aantal varkens
x + y = 20
2 ∗ x + 4 ∗ y = 56
Jose Lagerberg (UvA)
Inleiding Programmeren, College 3
8 september 2014
32 / 46
Andere oplossing met computer
Alle mogelijkheden testen tot oplossing gevonden:brute force
0 kippen
1 kip
2 kippen
...
19 k i p p e n
20 k i p p e n
20 v a r k e n s
19 v a r k e n s
18 v a r k e n s
...
1 varken
0 varkens
1
aantal koppen en aantal poten moeten ingevoerd worden
2
dan loop die alle gevallen test
Jose Lagerberg (UvA)
Inleiding Programmeren, College 3
8 september 2014
33 / 46
Invoer en aanroep solve methode
import j a v a . u t i l . ∗ ;
p u b l i c c l a s s TestFarm {
p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) {
S c a n n e r s c = new S c a n n e r ( System . i n ) ;
System . o u t . p r i n t l n ( ” E n t e r number o f h e a d s : ” ) ;
i n t heads = sc . n e x t I n t ( ) ;
System . o u t . p r i n t l n ( ” E n t e r number o f l e g s : ” ) ;
int l e g s = sc . nextInt ( ) ;
s o l v e ( legs , heads ) ;
}
s t a t i c v o i d s o l v e ( i n t numLegs , i n t numHeads ) {
...
}
}
Jose Lagerberg (UvA)
Inleiding Programmeren, College 3
8 september 2014
34 / 46
solve methode met for loop
s t a t i c v o i d s o l v e ( i n t numLegs , i n t numHeads ) {
i n t numChicks , numPigs , t o t L e g s ;
f o r ( numChicks = 0 ; numChicks <= numHeads ; numChicks++) {
numPigs = numHeads − numChicks ;
t o t L e g s = 4 ∗ numPigs + 2 ∗ numChicks ;
i f ( t o t L e g s == numLegs ) {
System . o u t . p r i n t l n ( ” Nr o f p i g s : ” + numPigs ) ;
System . o u t . p r i n t l n ( ” Nr o f c h i c k e n s : ” + numChicks ) ;
return ;
}
}
System . o u t . p r i n t l n ( ” There i s no s o l u t i o n ” ) ;
}
numHeads = 20
numLegs = 56
numChicks
numPigs
totLegs
0
20
80
1
19
78
...
12
8
56
gevonden
Jose Lagerberg (UvA)
Inleiding Programmeren, College 3
8 september 2014
35 / 46
Uitvoer TestFarm
% j a v a TestFarm
E n t e r number o f h e a d s :
20
E n t e r number o f l e g s :
56
Nr o f p i g s : 8
Nr o f c h i c k e n s : 12
% j a v a TestFarm
E n t e r number o f h e a d s :
20
E n t e r number o f l e g s :
20
There i s no s o l u t i o n
Jose Lagerberg (UvA)
Inleiding Programmeren, College 3
8 september 2014
36 / 46
10 variabelen van hetzelfde type
public c l a s s BerekenGemiddelde {
p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) {
i n t a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 ;
i n t som ;
do u b l e g e m i d d e l d e ;
a1 = 6 ; a2 = 4 ; a3 = 1 ; a4 = 9 ; a5 = 3 ;
a6 = 6 ; a7 = 1 ; a8 = 4 ; a9 = 5 ; a10 = 2 ;
som = a1 + a2 + a3 + a4 + a5 + a6 + a7 ;
som += a8 + a9 + a10 ;
g e m i d d e l d e = som / 1 0 . 0 ;
System . o u t . p r i n t l n ( g e m i d d e l d e ) ;
}
}
Jose Lagerberg (UvA)
Inleiding Programmeren, College 3
8 september 2014
37 / 46
10 variabelen van hetzelfde type in array
public c l a s s BerekenGemiddelde {
p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) {
i n t [ ] a = new i n t [ 1 0 ] ;
i n t som = 0 ;
do u b l e g e m i d d e l d e ;
System . o u t . p r i n t l n ( a ) ;
a [0] = 6; a [1] = 4; a [2] = 1; a [3] = 9; a [4] = 3;
a [5] = 6; a [6] = 1; a [7] = 4; a [8] = 5; a [9] = 2;
f o r ( i n t i = 0 ; i < 1 0 ; i ++)
som += a [ i ] ;
g e m i d d e l d e = som / 1 0 . 0 ;
System . o u t . p r i n t l n ( g e m i d d e l d e ) ;
}
}
[ I@1d9f953d
4.1
Jose Lagerberg (UvA)
Inleiding Programmeren, College 3
8 september 2014
38 / 46
Arrays in Java
1
array maken: declareren, cre¨eren en initialiseren
2
toegang tot i-de element met a[i]
3
array index start met 0
int N = 10;
int [ ] a ;
a = new i n t [ N ] ;
f o r ( i n t i = 0 ; i < 1 0 ; i ++)
a [ i ] = 0;
//
//
//
//
//
g r o o t t e van a r r a y
d e c l a r a t i e van a r r a y
c r e a t i e van a r r a y
i n i t i a l i s a t i e van a r r a y
op n u l
Dit kan compacter:
int N = 10;
i n t [ ] a = new i n t [ N ] ;
Jose Lagerberg (UvA)
// d e f a u l t i s 0
Inleiding Programmeren, College 3
8 september 2014
39 / 46
Compacte initialisatie in Java
p u b l i c c l a s s Gemiddelde {
p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) {
i n t [ ] a = {6 , 4 , 1 , 9 , 3 , 6 , 1 , 4 , 5 , 2};
i n t som = 0 ;
do u b l e g e m i d d e l d e ;
f o r ( i n t i = 0 ; i < a . l e n g t h ; i ++)
som += a [ i ] ;
g e m i d d e l d e = ( double ) som / a . l e n g t h ;
System . o u t . p r i n t l n ( g e m i d d e l d e ) ;
}
}
Jose Lagerberg (UvA)
Inleiding Programmeren, College 3
8 september 2014
40 / 46
Draai elementen in array om
public class Reverse {
p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) {
i n t [ ] a = {6 , 4 , 1 , 9 , 3 , 6 , 1 , 4 , 5 , 2};
f o r ( i n t i = 0 ; i < a . l e n g t h / 2 ; i ++) {
i n t temp = a [ i ] ;
a [ i ] = a [ a . length − 1 − i ] ;
a [ a . l e n g t h − 1 − i ] = temp ;
}
f o r ( i n t i = 0 ; i < a . l e n g t h ; i ++)
System . o u t . p r i n t ( a [ i ] + ” ” ) ;
System . o u t . p r i n t l n ( ) ;
}
}
% java Reverse
2 5 4 1 6 3 9 1 4 6
Jose Lagerberg (UvA)
Inleiding Programmeren, College 3
8 september 2014
41 / 46
Print random kaart
p u b l i c c l a s s PrintRandomKaart {
p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) {
S t r i n g [ ] k a a r t = {”2” , ”3” , ”4” , ”5” , ”6” , ”7” , ”8” , ”9” ,
” b o e r ” , ” vrouw ” , ” k o n i n g ” , ” a a s ” } ;
S t r i n g [ ] k l e u r = {” k l a v e r ” , ” r u i t e n ” , ” h a r t e n ” , ” schoppen ” } ;
i n t i = ( i n t ) ( Math . random ( ) ∗ 1 3 ) ; // t u s s e n 0 en 12
i n t j = ( i n t ) ( Math . random ( ) ∗ 4 ) ; // t u s s e n 0 en 3
System . o u t . p r i n t l n ( k a a r t [ i ] + ” van ” + k l e u r [ j ] ) ;
}
}
% j a v a PrintRandomKaart
2 van k l a v e r
Jose Lagerberg (UvA)
Inleiding Programmeren, College 3
8 september 2014
42 / 46
Twee-dimensionale arrays
uit slides 1.4 Arrays van
Sedgewick
int M = 10;
int N = 3;
d ouble [ ] [ ] a = new double [M] [ N ] ;
f o r ( i n t = 0 ; i < M; i ++) {
f o r ( i n t j = 0 ; j < N ; j ++) {
a[ i ][ j ] = 0.0;
}
}
Jose Lagerberg (UvA)
Inleiding Programmeren, College 3
8 september 2014
43 / 46
Array vullen bij compilatie
uit slides 1.4 Arrays van Sedgewick
d o u ble [ ] [ ]
{ .02 ,
{ .02 ,
{ .02 ,
{ .92 ,
{ .47 ,
};
a = {
.92 , .02 ,
.02 , .32 ,
.02 , .02 ,
.02 , .02 ,
.02 , .47 ,
Jose Lagerberg (UvA)
.02 ,
.32 ,
.92 ,
.02 ,
.02 ,
.02
.32
.02
.02
.02
},
},
},
},
},
Inleiding Programmeren, College 3
8 september 2014
44 / 46
Optellen twee matrices
uit slides 1.4 Arrays van Sedgewick
d o u ble [ ] [ ] c = new d o uble [ N ] [ N ] ;
f o r ( i n t i = 0 ; i < N ; i ++)
f o r ( i n t j = 0 ; j < N ; j ++)
c[ i ][ j ] = a[ i ][ j ] + b[ i ][ j ];
Jose Lagerberg (UvA)
Inleiding Programmeren, College 3
8 september 2014
45 / 46
Overzicht
Aan de orde gekomen zijn de volgende begrippen:
1
Verschillende soorten fouten
2
Operaties op numerieke datatypen
3
Evaluatie van expressies, bindingssterkte
4
Assignment operaties en short-cut operatoren
5
Herhaling met while en do-while loop
6
Selectie met switch statement
Arrays
7
I
I
I
om grote hoeveelheden data op te slaan
bijna even makkelijk als primitieve typen
elk element toegankelijk via index
Jose Lagerberg (UvA)
Inleiding Programmeren, College 3
8 september 2014
46 / 46