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
7 september 2015
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
7 september 2015
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
7 september 2015
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
7 september 2015
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
7 september 2015
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
7 september 2015
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
7 september 2015
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
7 september 2015
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
7 september 2015
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
7 september 2015
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
7 september 2015
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
7 september 2015
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
7 september 2015
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
7 september 2015
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
7 september 2015
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
7 september 2015
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
7 september 2015
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
7 september 2015
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
7 september 2015
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
7 september 2015
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
7 september 2015
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
7 september 2015
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
7 september 2015
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
7 september 2015
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
7 september 2015
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
7 september 2015
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
7 september 2015
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
7 september 2015
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
7 september 2015
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
7 september 2015
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
7 september 2015
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
7 september 2015
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
7 september 2015
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
7 september 2015
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
7 september 2015
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
7 september 2015
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
7 september 2015
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
7 september 2015
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
7 september 2015
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
7 september 2015
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
7 september 2015
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
7 september 2015
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
7 september 2015
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
7 september 2015
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
7 september 2015
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
7 september 2015
46 / 46