• Aucun résultat trouvé

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

N/A
N/A
Protected

Academic year: 2022

Partager "LU2IN002 TYPES DE BASE, VARIABLES, BOUCLES, CONDITIONNELLES GUIDE DE SURVIE EN JAVA"

Copied!
26
0
0

Texte intégral

(1)

LU2IN002

TYPES DE BASE, VARIABLES, BOUCLES, CONDITIONNELLES

GUIDE DE SURVIE EN JAVA

Vincent Guigue

(2)

Types des variables de base en JAVA

Entier, réel, booléen, caractère: ces types sont disponibles de base en JAVA avec les 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 vauttrue/false et n’est pas convertible en entier

Déclaration

1 i n t i ; // d e c l a r a t i o n de i

2 S y s t e m . o u t . p r i n t l n ( i ) ; // => 0

3 d o u b l e d = 2 . 6 ;

4 b o o l e a n b = t r u e; // ou f a l s e

5 c h a r c = ’ a ’;

1 // o p e r a t i o n s de b a s e : + / . . .

2 i n t j = i +2;

3 i n t k = 1 / 2 ; //=0 A t 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

(3)

Types des variables de base en JAVA

Entier, réel, booléen, caractère: ces types sont disponibles de base en JAVA avec les 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 vauttrue/false et n’est pas convertible en entier

Déclaration

1 i n t i ; // d e c l a r a t i o n de i

2 S y s t e m . o u t . p r i n t l n ( i ) ; // => 0

3 d o u b l e d = 2 . 6 ;

4 b o o l e a n b = t r u e; // ou f a l s e

5 c h a r c = ’ a ’;

1 // o p e r a t i o n s de b a s e : + / . . .

2 i n t j = i +2;

3 i n t k = 1 / 2 ; //=0 A t 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

(4)

Types des variables de base en JAVA

Entier, réel, booléen, caractère: ces types sont disponibles de base en JAVA avec les 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 vauttrue/false et n’est pas convertible en entier Déclaration

1 i n t i ; // d e c l a r a t i o n de i

2 S y s t e m . o u t . p r i n t l n ( i ) ; // => 0

3 d o u b l e d = 2 . 6 ;

4 b o o l e a n b = t r u e; // ou f a l s e

5 c h a r c = ’ a ’;

1 // o p e r a t i o n s de b a s e : + / . . .

2 i n t j = i +2;

3 i n t k = 1 / 2 ; //=0 A t 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

(5)

Types des variables de base en JAVA

Entier, réel, booléen, caractère: ces types sont disponibles de base en JAVA avec les 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 vauttrue/false et n’est pas convertible en entier Déclaration

1 i n t i ; // d e c l a r a t i o n de i

2 S y s t e m . o u t . p r i n t l n ( i ) ; // => 0

3 d o u b l e d = 2 . 6 ;

4 b o o l e a n b = t r u e; // ou f a l s e

5 c h a r c = ’ a ’;

1 // o p e r a t i o n s de b a s e : + / . . .

2 i n t j = i +2;

3 i n t k = 1 / 2 ; //=0 A t 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

(6)

Classe String

Gestion des chaines de caractères

Stringn’est pas un type de base, c’est un objet qui se comporte différemment des types de base... Mais c’est une classe complètement intégrée à JAVA et son caractère immutable la rapproche très nettement d’un type de base.

1 S t r i n g s = " t o t o "; // c r e a t i o n d ’ une c h a i n e de c a r a c t e r e s

2 s = s + " ␣ v a ␣ a ␣ l a ␣ f a c ";

3 S y s t e m . o u t . p r i n t l n ( s ) ; // a f f i c h a g e de s d a n s l a c o n s o l e

Ne pas confondre l’objetStringet l’affichage dans la console.

Lespossibilités sont nombreuses: extraction de sous-chaines (substring), division en 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

(7)

Classe String

Gestion des chaines de caractères

Stringn’est pas un type de base, c’est un objet qui se comporte différemment des types de base... Mais c’est une classe complètement intégrée à JAVA et son caractère immutable la rapproche très nettement d’un type de base.

1 S t r i n g s = " t o t o "; // c r e a t i o n d ’ une c h a i n e de c a r a c t e r e s

2 s = s + " ␣ v a ␣ a ␣ l a ␣ f a c ";

3 S y s t e m . o u t . p r i n t l n ( s ) ; // a f f i c h a g e de s d a n s l a c o n s o l e

Ne pas confondre l’objetStringet l’affichage dans la console.

Lespossibilités sont nombreuses: extraction de sous-chaines (substring), division en 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

(8)

Classe String

Gestion des chaines de caractères

Stringn’est pas un type de base, c’est un objet qui se comporte différemment des types de base... Mais c’est une classe complètement intégrée à JAVA et son caractère immutable la rapproche très nettement d’un type de base.

1 S t r i n g s = " t o t o "; // c r e a t i o n d ’ une c h a i n e de c a r a c t e r e s

2 s = s + " ␣ v a ␣ a ␣ l a ␣ f a c ";

3 S y s t e m . o u t . p r i n t l n ( s ) ; // a f f i c h a g e de s d a n s l a c o n s o l e

Ne pas confondre l’objetStringet l’affichage dans la console.

Lespossibilités sont nombreuses: extraction de sous-chaines (substring), division en 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

(9)

String (suite)

2 choses à retenir sur lesString

1 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 la classe peu efficiente dans certain cas... Et il faut alors se tourner vers des objets plus évolués (StringBuffer notamment)

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

1 S t r i n g s 1 = " t o t o ";

2 S t r i n g s 2 = " t i t i ";

3 i f( s 1 . e q u a l s ( s 2 ) )

4 S y s t e m . o u t . p r i n t l n (" I e s ␣ c h a i n e s ␣ s o n t ␣ i d e n t i q u e s ") ;

5 e l s e

6 S y s t e m . o u t . p r i n t l n (" I e s ␣ c h a i n e s ␣ s o n t ␣ d i f f e r e n t e s ") ;

4/13

(10)

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 variablesdé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){

...

} } Domaine de validité de i }

i est accessible partout dans la fonction

i est détruite en sortie de bloc

5/13

(11)

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 variablesdé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

(12)

Conversions entre types JAVA, un langage typé

Les types sont très importants en JAVA: le compilateur vérifie toujours les types des différentes variables

Certaines conversions sontimplicites:

1 d o u b l e d = 1 ; d o u b l e d2 = i ; // a v e c i un i n t e x i s t a n t

Il est possible de transformer n’importe quel type de base enString (l’affichage est donc facile)

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

Certaines conversions doivent êtreexplicites

1 i n t i = (i n t) 2 . 4 ;

Conversions impossibles

1 i n t i = (i n t) t r u e; // c o n v e r s i o n i m p o s s i b l e d e s b o o l e e n s

2 // v e r s l e d o m a i n e n u m e r i q u e

3 // => ERREUR de c o m p i l a t i o n

6/13

(13)

Conversions entre types JAVA, un langage typé

Les types sont très importants en JAVA: le compilateur vérifie toujours les types des différentes variables

Certaines conversions sontimplicites:

1 d o u b l e d = 1 ; d o u b l e d2 = i ; // a v e c i un i n t e x i s t a n t

Il est possible de transformer n’importe quel type de base enString (l’affichage est donc facile)

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

Certaines conversions doivent êtreexplicites

1 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 conversion implicitement, il faut que le programmeur la demande explicitement (pour être sûr que la perte d’information est souhaitée).

Conversions impossibles

1 i n t i = (i n t) t r u e; // c o n v e r s i o n i m p o s s i b l e d e s b o o l e e n s

2 // v e r s l e d o m a i n e n u m e r i q u e

3 // => ERREUR de c o m p i l a t i o n

6/13

(14)

Conversions entre types JAVA, un langage typé

Les types sont très importants en JAVA: le compilateur vérifie toujours les types des différentes variables

Certaines conversions sontimplicites:

1 d o u b l e d = 1 ; d o u b l e d2 = i ; // a v e c i un i n t e x i s t a n t

Il est possible de transformer n’importe quel type de base enString (l’affichage est donc facile)

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

Certaines conversions doivent êtreexplicites

1 i n t i = (i n t) 2 . 4 ;

Conversions impossibles

1 i n t i = (i n t) t r u e; // c o n v e r s i o n i m p o s s i b l e d e s b o o l e e n s

2 // v e r s l e d o m a i n e n u m e r i q u e

3 // => ERREUR de c o m p i l a t i o n

6/13

(15)

Syntaxe des fonctions/méthodes

Syntaxe directement inspirée du C/C++

Déclaration:

visibilité type de retour nom de la fonction arguments

public 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 p u b l i c d o u b l e m o n C a l c u l (i n t i , d o u b l e d ) {

2 d o u b l e r e s u l t a t = 1 0 0 . + i d ;

3 r e t u r n r e s u l t a t ;

4 }

7/13

(16)

Syntaxe des fonctions/méthodes

Syntaxe directement inspirée du C/C++

Déclaration:

visibilité type de retour nom de la fonction arguments

public 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 p u b l i c d o u b l e m o n C a l c u l (i n t i , d o u b l e d ) {

2 d o u b l e r e s u l t a t = 1 0 0 . + i d ;

3 r e t u r n r e s u l t a t ;

4 }

7/13

(17)

Syntaxe des fonctions/méthodes

Syntaxe directement inspirée du C/C++

Déclaration:

visibilité type de retour nom de la fonction arguments

public 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 p u b l i c d o u b l e m o n C a l c u l (i n t i , d o u b l e d ) {

2 d o u b l e r e s u l t a t = 1 0 0 . + i d ;

3 r e t u r n r e s u l t a t ;

4 }

7/13

(18)

Syntaxe des fonctions/méthodes

Syntaxe directement inspirée du C/C++

Déclaration:

visibilité type de retour nom de la fonction arguments

public 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 p u b l i c d o u b l e m o n C a l c u l (i n t i , d o u b l e d ) {

2 d o u b l e r e s u l t a t = 1 0 0 . + i d ;

3 r e t u r n r e s u l t a t ;

4 }

7/13

(19)

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 ) expr

opé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

(20)

Conditionnelles

Syntaxe du Si, ... Alors:

1 i n t i =8;

2 i f( i > 5 ) {

3 // c o d e a e f f e c t u e r d a n s c e c a s

4 }

5 e l s e{ // l e e l s e e s t f a c u l t a t i f

6 // Code a e f f e c t u e r s i n o n

7 }

En cas de clauses multiples:

1 s w i t c h( i ) {

2 c a s e 1 :

3 // Code a e f f e c t u e r s i i == 1

4 b r e a k; // s i n o n l e r e s t e du c o d e e s t AUSSI e f f e c t u e

5 c a s e 2 : //

6 // Code a e f f e c t u e r s i i == 2

7 b r e a k;

8 d e f a u l t : // S i on n ’ e s t p a s s e n u l l e p a r t a i l l e u r s

9 }

9/13

(21)

Conditionnelles

Syntaxe du Si, ... Alors:

1 i n t i =8;

2 i f( i > 5 ) {

3 // c o d e a e f f e c t u e r d a n s c e c a s

4 }

5 e l s e{ // l e e l s e e s t f a c u l t a t i f

6 // Code a e f f e c t u e r s i n o n

7 }

En cas de clauses multiples:

1 s w i t c h( i ) {

2 c a s e 1 :

3 // Code a e f f e c t u e r s i i == 1

4 b r e a k; // s i n o n l e r e s t e du c o d e e s t AUSSI e f f e c t u e

5 c a s e 2 : //

6 // Code a e f f e c t u e r s i i == 2

7 b r e a k;

8 d e f a u l t : // S i on n ’ e s t p a s s e n u l l e p a r t a i l l e u r s

9 }

9/13

(22)

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 p r e n d l e s v a l e u r s 0 a 9 =

3 // 10 i t e r a t i o n s

4 // c o d e a e f f e c t u e r 10 f o i s

5 }

Tant que i inférieur à 10, faire...

1 i n t i = 0 ;

2 w h i l e( i <10){// i p r e n d l e s v a l e u r s 0 a 9 =

3 // 10 i t e r a t i o n s

4 // c o d e a e f f e c t u e r 10 f o i s

5 i ++; // ne p a s o u b l i e r , s i n o n b o u c l e i n f i n i e !

6 }

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

10/13

(23)

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 p r e n d l e s v a l e u r s 0 a 9 =

3 // 10 i t e r a t i o n s

4 // c o d e a e f f e c t u e r 10 f o i s

5 }

Tant que i inférieur à 10, faire...

1 i n t i = 0 ;

2 w h i l e( i <10){// i p r e n d l e s v a l e u r s 0 a 9 =

3 // 10 i t e r a t i o n s

4 // c o d e a e f f e c t u e r 10 f o i s

5 i ++; // ne p a s o u b l i e r , s i n o n b o u c l e i n f i n i e !

6 }

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

10/13

(24)

Interruptions de fonctions/boucles (1/3) 3 types d’interruptions de boucles

return: l’interruption la plus forte. Coupe l’exécution de la méthode (sort de la fonction, pas seulement la boucle).

1 // l e modulo p a r 5 p e u t−i l r e t r o u n e r un e n t i e r >=5?

2 p u b l i c v o i d m a F o n c t i o n ( ) {

3 f o r(i n t i =0; i <10; i ++){

4 i f( i %5>4){

5 S y s t e m . o u t . p r i n t l n ("C ’ e s t ␣ t r e s ␣ e t r a n g e ") ;

6 r e t u r n;

7 }

8 }

9 S y s t e m . o u t . 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

(25)

Interruptions de fonctions/boucles (2/3) 3 types d’interruptions de boucles

return

break : l’interruption de boucle

1 // 6 f a i ti l p a r t i d e s m u l t i p l e s de 2?

2 p u b l i c v o i d m a F o n c t i o n ( ) {

3 b o o l e a n f o u n d = t r u e;

4 f o r(i n t i =0; i <10; i ++){

5 i f( i 2 == 6 ) {

6 f o u n d = t r u e;

7 b r e a k; // p a s b e s o i n d ’ a l l e r p l u s l o i n

8 }

9 }

10 i f( f o u n d )

11 S y s t e m . o u t . p r i n t l n (" 6 ␣ f a i t ␣ p a r t i ␣ d e s ␣ m u l t i p l e s ␣ de ␣ 2 ") ;

12 }

12/13

(26)

Interruptions de fonctions/boucles (3/3) 3 types d’interruptions de boucles

return break

continue: sauter une itération de boucle

1 // a f f i c h e r 3 . / i p o u r i v a r i a n t de −10 a 10

2 // i l f a u t p e n s e r a s a u t e r l e c a s 0 q u i p r o v o q u e un p r o b l e m e

3 p u b l i c v o i d m a F o n c t i o n ( ) {

4 f o r(i n t i =−10; i <=10; i ++){// −10 e t 10 i n c l u s

5 i f( i == 0 )

6 c o n t i n u e;

7 S y s t e m . o u t . 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 blocs imbriqués.

13/13

Références

Documents relatifs

trois types pour les nombres : int (immuable), float (immuable), complex (immuable) des types pour les s´ equences : de caract` eres : str (immuable), d’entiers positifs :

Each abstract value represents the types of values (more pre- cisely, sets of origins that declare values) that can flow to a given Java (stack or local) variable or to an origin..

Fields whose declared types are confined types should not be accessible from outside the package, i.e., confined fields in accessible (unconfined) types may not be public or protected

Q 60.2 Ecrire les classes ElemTrain (abstraite), Wagon (abstraite), Motrice, WVoyageur et WMarchandise avec au moins un constructeur avec param` etres et une red´ efinition de la

- Une variable d’instance (pas static) final est constante pour chaque instance ; mais elle peut avoir 2 valeurs différentes pour 2 instances. - Une variable d'instance final

Contrairement au passage par valeur des types primitifs (où les valeurs sont toujours dupliquées), les variables de type &#34;référence&#34; contiennent une référence sur un objet

Les variables sont utilis´ees pour stocker les donn´ees du programme. A chaque variable correspond un emplacement en m´emoire, o`u la donn´ee est stock´ee, et un nom qui sert

– Pilote: contient toutes les classes nécessaire pour communiquer avec une base de données}. – il faut utiliser la méthode forName de la classe Class