26
LU2IN002 TYPES DE BASE, VARIABLES, BOUCLES, CONDITIONNELLES GUIDE DE SURVIE EN JAVA Vincent Guigue

LU2IN002 Types de base, variables, boucles

  • Upload
    others

  • View
    5

  • Download
    0

Embed Size (px)

Citation preview

LU2IN002TYPES DE BASE, VARIABLES, BOUCLES,CONDITIONNELLESGUIDE DE SURVIE EN JAVA

Vincent Guigue

Types des variables de base en JAVA

Entier, réel, booléen, caractère: ces types sont disponibles de base en JAVA avecles opérateurs les plus courants.int, double, boolean, char, byte, short, long, float

La plupart des types et syntaxes associées sont comparables au C/C++...Sauf le booléen.

Le booléen vaut true/false et n’est pas convertible en entier

Déclaration1 i n t i ; // d e c l a r a t i o n de i2 System . out . p r i n t l n ( i ) ; // => 03 double d = 2 . 6 ;4 boolean b = t rue ; // ou f a l s e5 char c = ’ a ’ ;1 // o p e r a t i o n s de base : + − / ∗ . . .2 i n t j = i +2;3 i n t k = 1/2 ; //=0 At t e n t i o n a l a d i v i s i o n e n t i e r e

2/13

Types des variables de base en JAVA

Entier, réel, booléen, caractère: ces types sont disponibles de base en JAVA avecles opérateurs les plus courants.int, double, boolean, char, byte, short, long, float

La plupart des types et syntaxes associées sont comparables au C/C++...Sauf le booléen.

Le booléen vaut true/false et n’est pas convertible en entier

Déclaration1 i n t i ; // d e c l a r a t i o n de i2 System . out . p r i n t l n ( i ) ; // => 03 double d = 2 . 6 ;4 boolean b = t rue ; // ou f a l s e5 char c = ’ a ’ ;1 // o p e r a t i o n s de base : + − / ∗ . . .2 i n t j = i +2;3 i n t k = 1/2 ; //=0 At t e n t i o n a l a d i v i s i o n e n t i e r e

2/13

Types des variables de base en JAVA

Entier, réel, booléen, caractère: ces types sont disponibles de base en JAVA avecles opérateurs les plus courants.int, double, boolean, char, byte, short, long, float

La plupart des types et syntaxes associées sont comparables au C/C++...Sauf le booléen.

Le booléen vaut true/false et n’est pas convertible en entier

Déclaration1 i n t i ; // d e c l a r a t i o n de i2 System . out . p r i n t l n ( i ) ; // => 03 double d = 2 . 6 ;4 boolean b = t rue ; // ou f a l s e5 char c = ’ a ’ ;

1 // o p e r a t i o n s de base : + − / ∗ . . .2 i n t j = i +2;3 i n t k = 1/2 ; //=0 At t e n t i o n a l a d i v i s i o n e n t i e r e

2/13

Types des variables de base en JAVA

Entier, réel, booléen, caractère: ces types sont disponibles de base en JAVA avecles opérateurs les plus courants.int, double, boolean, char, byte, short, long, float

La plupart des types et syntaxes associées sont comparables au C/C++...Sauf le booléen.

Le booléen vaut true/false et n’est pas convertible en entier

Déclaration1 i n t i ; // d e c l a r a t i o n de i2 System . out . p r i n t l n ( i ) ; // => 03 double d = 2 . 6 ;4 boolean b = t rue ; // ou f a l s e5 char c = ’ a ’ ;1 // o p e r a t i o n s de base : + − / ∗ . . .2 i n t j = i +2;3 i n t k = 1/2 ; //=0 At t e n t i o n a l a d i v i s i o n e n t i e r e

2/13

Classe String

Gestion des chaines de caractèresString n’est pas un type de base, c’est un objet qui se comporte différemment destypes de base... Mais c’est une classe complètement intégrée à JAVA et son caractèreimmutable la rapproche très nettement d’un type de base.

1 S t r i n g s = " to to " ; // c r e a t i o n d ’ une cha i n e de c a r a c t e r e s2 s = s + "␣va␣a␣ l a ␣ f a c " ;3 System . out . p r i n t l n ( s ) ; // a f f i c h a g e de s dans l a c on s o l e

Ne pas confondre l’objet String et l’affichage dans la console.

Les possibilités sont nombreuses: extraction de sous-chaines (substring), divisionen plusieurs chaines (split), recherche de caractères, construction de nouvelles chainesà partir d’expressions régulières (replace)... Toute la documentation sur:http://docs.oracle.com/javase/7/docs/api/java/lang/String.html

3/13

Classe String

Gestion des chaines de caractèresString n’est pas un type de base, c’est un objet qui se comporte différemment destypes de base... Mais c’est une classe complètement intégrée à JAVA et son caractèreimmutable la rapproche très nettement d’un type de base.

1 S t r i n g s = " to to " ; // c r e a t i o n d ’ une cha i n e de c a r a c t e r e s2 s = s + "␣va␣a␣ l a ␣ f a c " ;3 System . out . p r i n t l n ( s ) ; // a f f i c h a g e de s dans l a c on s o l e

Ne pas confondre l’objet String et l’affichage dans la console.

Les possibilités sont nombreuses: extraction de sous-chaines (substring), divisionen plusieurs chaines (split), recherche de caractères, construction de nouvelles chainesà partir d’expressions régulières (replace)... Toute la documentation sur:http://docs.oracle.com/javase/7/docs/api/java/lang/String.html

3/13

Classe String

Gestion des chaines de caractèresString n’est pas un type de base, c’est un objet qui se comporte différemment destypes de base... Mais c’est une classe complètement intégrée à JAVA et son caractèreimmutable la rapproche très nettement d’un type de base.

1 S t r i n g s = " to to " ; // c r e a t i o n d ’ une cha i n e de c a r a c t e r e s2 s = s + "␣va␣a␣ l a ␣ f a c " ;3 System . out . p r i n t l n ( s ) ; // a f f i c h a g e de s dans l a c on s o l e

Ne pas confondre l’objet String et l’affichage dans la console.

Les possibilités sont nombreuses: extraction de sous-chaines (substring), divisionen plusieurs chaines (split), recherche de caractères, construction de nouvelles chainesà partir d’expressions régulières (replace)... Toute la documentation sur:http://docs.oracle.com/javase/7/docs/api/java/lang/String.html

3/13

String (suite)

2 choses à retenir sur les String1 Les chaines sont immutables: modifier une chaine existante est impossible, il

faut créer une nouvelle chaine qui est une modification de l’ancienne. Cela rend laclasse peu efficiente dans certain cas... Et il faut alors se tourner vers des objetsplus évolués (StringBuffer notamment)

2 Ne pas utiliser == avec les String mais toujours la méthode .equals. Les deuxversions compilent mais la première donnera régulièrement des résultats faux (quenous expliquerons plus tard).

1 S t r i n g s1 = " to to " ;2 S t r i n g s2 = " t i t i " ;3 i f ( s1 . e qu a l s ( s2 ) )4 System . out . p r i n t l n ( " I e s ␣ c h a i n e s ␣ son t ␣ i d e n t i q u e s " ) ;5 e l s e6 System . out . p r i n t l n ( " I e s ␣ c h a i n e s ␣ son t ␣ d i f f e r e n t e s " ) ;

4/13

Durée de vie, logique de bloc

une fonction est un bloc,une boucle ou une conditionnelle forme également un bloc,les blocs sont repérés par des accolades: {...}

Les variables déclarée dans un bloc sont détruites en sortant du bloc.

public void maFonction { int i = 2; for(int j=0; j<10; j++){ int k = 3; ... if(k<2){ ... } }}D

omai

ne d

e va

lidité

de

i

i est accessible partout dans la fonction

i est détruite en sortie de bloc

5/13

Durée de vie, logique de bloc

une fonction est un bloc,une boucle ou une conditionnelle forme également un bloc,les blocs sont repérés par des accolades: {...}

Les variables déclarée dans un bloc sont détruites en sortant du bloc.

public void maFonction { int i = 2; for(int j=0; j<10; j++){ int k = 3; ... if(k<2){ ... } }}

5/13

Conversions entre types

JAVA, un langage typéLes types sont très importants en JAVA: le compilateur vérifie toujours les types desdifférentes variables

Certaines conversions sont implicites:1 double d = 1 ; double d2 = i ; // avec i un i n t e x i s t a n t

Il est possible de transformer n’importe quel type de base en String (l’affichageest donc facile)

1 S t r i n g s = "mon␣message ␣"+1.5+"␣"+d ;

Certaines conversions doivent être explicites1 i n t i = ( i n t ) 2 . 4 ;

Conversions impossibles1 i n t i = ( i n t ) t rue ; // c o n v e r s i o n imp o s s i b l e des boo l e en s2 // v e r s l e domaine numer ique3 // => ERREUR de comp i l a t i o n

6/13

Conversions entre types

JAVA, un langage typéLes types sont très importants en JAVA: le compilateur vérifie toujours les types desdifférentes variables

Certaines conversions sont implicites:1 double d = 1 ; double d2 = i ; // avec i un i n t e x i s t a n t

Il est possible de transformer n’importe quel type de base en String (l’affichageest donc facile)

1 S t r i n g s = "mon␣message ␣"+1.5+"␣"+d ;

Certaines conversions doivent être explicites1 i n t i = ( i n t ) 2 . 4 ;

il y a une perte d’information liée à la conversion; JAVA ne tolère pas la conversionimplicitement, il faut que le programmeur la demande explicitement (pour être sûr quela perte d’information est souhaitée).

Conversions impossibles1 i n t i = ( i n t ) t rue ; // c o n v e r s i o n imp o s s i b l e des boo l e en s2 // v e r s l e domaine numer ique3 // => ERREUR de comp i l a t i o n

6/13

Conversions entre types

JAVA, un langage typéLes types sont très importants en JAVA: le compilateur vérifie toujours les types desdifférentes variables

Certaines conversions sont implicites:1 double d = 1 ; double d2 = i ; // avec i un i n t e x i s t a n t

Il est possible de transformer n’importe quel type de base en String (l’affichageest donc facile)

1 S t r i n g s = "mon␣message ␣"+1.5+"␣"+d ;

Certaines conversions doivent être explicites1 i n t i = ( i n t ) 2 . 4 ;

Conversions impossibles1 i n t i = ( i n t ) t rue ; // c o n v e r s i o n imp o s s i b l e des boo l e en s2 // v e r s l e domaine numer ique3 // => ERREUR de comp i l a t i o n

6/13

Syntaxe des fonctions/méthodes

Syntaxe directement inspirée du C/C++Déclaration:visibilité type de retour nom de la fonction argumentspublic double monCalcul (int arg1, String arg2)

Calculs diversRetour (obligatoire si autre que void)Bonne pratique: on n’utilise pas les arguments comme variable tampon !! ⇒argument = constante

1 pub l i c double monCalcul ( i n t i , double d ){

2 double r e s u l t a t = 100 . + i ∗ d ;

3 re tu rn r e s u l t a t ;4 }

7/13

Syntaxe des fonctions/méthodes

Syntaxe directement inspirée du C/C++Déclaration:visibilité type de retour nom de la fonction argumentspublic double monCalcul (int arg1, String arg2)

Calculs divers

Retour (obligatoire si autre que void)Bonne pratique: on n’utilise pas les arguments comme variable tampon !! ⇒argument = constante

1 pub l i c double monCalcul ( i n t i , double d ){

2 double r e s u l t a t = 100 . + i ∗ d ;

3 re tu rn r e s u l t a t ;4 }

7/13

Syntaxe des fonctions/méthodes

Syntaxe directement inspirée du C/C++Déclaration:visibilité type de retour nom de la fonction argumentspublic double monCalcul (int arg1, String arg2)

Calculs diversRetour (obligatoire si autre que void)

Bonne pratique: on n’utilise pas les arguments comme variable tampon !! ⇒argument = constante

1 pub l i c double monCalcul ( i n t i , double d ){

2 double r e s u l t a t = 100 . + i ∗ d ;

3 re tu rn r e s u l t a t ;4 }

7/13

Syntaxe des fonctions/méthodes

Syntaxe directement inspirée du C/C++Déclaration:visibilité type de retour nom de la fonction argumentspublic double monCalcul (int arg1, String arg2)

Calculs diversRetour (obligatoire si autre que void)Bonne pratique: on n’utilise pas les arguments comme variable tampon !! ⇒argument = constante

1 pub l i c double monCalcul ( i n t i , double d ){

2 double r e s u l t a t = 100 . + i ∗ d ;

3 re tu rn r e s u l t a t ;4 }

7/13

Opérateurs classiques (par ordre de priorité)

opérateurs postfixés [ ] . expr++ expr--opérateurs unaires ++expr --expr +expr -expr ~ !création ou cast new ( type ) expropérateurs multiplicatifs * / %opérateurs additifs + -décalages << >> >>>opérateurs relationnels < > <= >=opérateurs d’égalité == !=et bit à bit &ou exclusif bit à bit ^ou ( inclusif ) bit à bit |et logique &&ou logique ||opérateur conditionnel ? :affectations = += -= *= /= %= &= ^= |= <<= >>= >>>=

8/13

Conditionnelles

Syntaxe du Si, ... Alors:1 i n t i =8;2 i f ( i > 5){3 // code a e f f e c t u e r dans ce cas4 }5 e l s e { // l e e l s e e s t f a c u l t a t i f6 // Code a e f f e c t u e r s i n on7 }

En cas de clauses multiples:1 switch ( i ){2 case 1 :3 // Code a e f f e c t u e r s i i == 14 break ; // s i n on l e r e s t e du code e s t AUSSI e f f e c t u e5 case 2 : //6 // Code a e f f e c t u e r s i i == 27 break ;8 de f au l t : // S i on n ’ e s t pa s s e n u l l e p a r t a i l l e u r s9 }

9/13

Conditionnelles

Syntaxe du Si, ... Alors:1 i n t i =8;2 i f ( i > 5){3 // code a e f f e c t u e r dans ce cas4 }5 e l s e { // l e e l s e e s t f a c u l t a t i f6 // Code a e f f e c t u e r s i n on7 }

En cas de clauses multiples:1 switch ( i ){2 case 1 :3 // Code a e f f e c t u e r s i i == 14 break ; // s i n on l e r e s t e du code e s t AUSSI e f f e c t u e5 case 2 : //6 // Code a e f f e c t u e r s i i == 27 break ;8 de f au l t : // S i on n ’ e s t pa s s e n u l l e p a r t a i l l e u r s9 }

9/13

Boucles

La définition des boucles est identiques au C/C++

Syntaxes: 2 options (principales)Pour i allant de 0 à 9, faire...

1 i n t i ;2 f o r ( i =0; i <10; i ++){// i prend l e s v a l e u r s 0 a 9 =3 // 10 i t e r a t i o n s4 // code a e f f e c t u e r 10 f o i s5 }

Tant que i inférieur à 10, faire...1 i n t i = 0 ;2 whi le ( i <10){// i prend l e s v a l e u r s 0 a 9 =3 // 10 i t e r a t i o n s4 // code a e f f e c t u e r 10 f o i s5 i ++; // ne pas o u b l i e r , s i n on bouc l e i n f i n i e !6 }

D’autres syntaxes sont possibles : do...while etc...

10/13

Boucles

La définition des boucles est identiques au C/C++

Syntaxes: 2 options (principales)Pour i allant de 0 à 9, faire...

1 i n t i ;2 f o r ( i =0; i <10; i ++){// i prend l e s v a l e u r s 0 a 9 =3 // 10 i t e r a t i o n s4 // code a e f f e c t u e r 10 f o i s5 }

Tant que i inférieur à 10, faire...1 i n t i = 0 ;2 whi le ( i <10){// i prend l e s v a l e u r s 0 a 9 =3 // 10 i t e r a t i o n s4 // code a e f f e c t u e r 10 f o i s5 i ++; // ne pas o u b l i e r , s i n on bouc l e i n f i n i e !6 }

D’autres syntaxes sont possibles : do...while etc...

10/13

Interruptions de fonctions/boucles (1/3)

3 types d’interruptions de bouclesreturn : l’interruption la plus forte. Coupe l’exécution de la méthode (sort dela fonction, pas seulement la boucle).

1 // l e modulo par 5 peut− i l r e t r o u n e r un e n t i e r >=5?2 pub l i c vo id maFonction ( ){3 f o r ( i n t i =0; i <10; i ++){4 i f ( i %5>4){5 System . out . p r i n t l n ( "C ’ e s t ␣ t r e s ␣ e t r ange " ) ;6 re tu rn ;7 }8 }9 System . out . p r i n t l n ( " l ’ o p e r a t i o n ␣modulo␣5␣ r e t o u r n e "+

10 " t o u j o u r s ␣un␣ e n t i e r ␣ i n f e r i e u r ␣a␣5" ) ;11 }

11/13

Interruptions de fonctions/boucles (2/3)

3 types d’interruptions de bouclesreturn

break : l’interruption de boucle1 // 6 f a i t − i l p a r t i des mu l t i p l e s de 2?2 pub l i c vo id maFonction ( ){3 boolean found = t rue ;4 f o r ( i n t i =0; i <10; i ++){5 i f ( i ∗ 2 == 6){6 found = t rue ;7 break ; // pas b e s o i n d ’ a l l e r p l u s l o i n8 }9 }

10 i f ( found )11 System . out . p r i n t l n ( "6␣ f a i t ␣ p a r t i ␣ des ␣ mu l t i p l e s ␣de␣2" ) ;12 }

12/13

Interruptions de fonctions/boucles (3/3)

3 types d’interruptions de bouclesreturn

break

continue: sauter une itération de boucle1 // a f f i c h e r 3 . / i pour i v a r i a n t de −10 a 102 // i l f a u t pen s e r a s a u t e r l e cas 0 qu i provoque un prob leme3 pub l i c vo id maFonction ( ){4 f o r ( i n t i =−10; i <=10; i ++){// −10 e t 10 i n c l u s5 i f ( i == 0)6 cont inue ;7 System . out . p r i n t l n ( " 3 ./ "+i+"␣=␣"+(3./ i ) ) ;8 }9 }

Ces instructions rendent le code plus lisible en limitant notamment le nombre de blocsimbriqués.

13/13