Vous êtes sur la page 1sur 17

Initiation Java

Thomas Rey
19 dcembre 2014
Rsum
Quelques notes prises pendant le MOOC Intiation Java suivi sur la Plateforme
Coursera et propos par lEPFL (cole Polytechnique Fdrale de Lausanne).
Merci Jamila Sam, Jean-Cdric Chappelier et Vincent Lepetit pour ce cours.

Table des matires


1 Variables
1.1 Dfinition et initialisation .
1.2 Types de variables . . . . .
1.3 Rgles et conventions . . . .
1.4 Affectations . . . . . . . . .
1.5 Dclaration de constantes .
1.6 Variables : lecture - criture
1.7 Oprateurs . . . . . . . . . .

.
.
.
.
.
.
.

3
3
3
4
4
4
5
6

.
.
.
.
.
.

6
6
7
7
7
7
8

3 Itrations
3.1 La boucle for . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.2 Les boucles while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.3 Les blocs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

8
8
8
9

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

2 Branchements et conditions
2.1 Branchements conditionnels . . . .
2.2 Oprateurs . . . . . . . . . . . . . .
2.2.1 Oprateurs de comparaison
2.2.2 Oprateurs logiques . . . . .
2.3 Erreurs courantes . . . . . . . . . .
2.4 Le type boolean . . . . . . . . . . .

.
.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.

Initiation Java
4 Tableaux
4.1 Dfinition . . . . . . . . . . . .
4.2 Traitements sur les tableaux . .
4.3 Type de base Type volu . .
4.4 Tableaux de dimension multiple
5 Les
5.1
5.2
5.3

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

T. Rey

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

9
9
10
11
11

chanes de caractres
13
Dfinitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
Oprations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
galits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

6 Les tableaux dynamiques


7 Les
7.1
7.2
7.3

.
.
.
.

MOOC EPFL

14

fonctions/mthodes
16
Dfinition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
Appel une mthode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
Mthodologie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

Page 2

Notes de cours

Initiation Java

1
1.1

MOOC EPFL

Variables
Dfinition et initialisation

Une variable possde trois caractristiques :


son identificateur, qui est son nom ;
son type qui dfinit de quel genre est la donne ;
sa valeur qui est le contenu .
Exemple 1.
Dclaration dune variable de type int (cest--dire entire) :
1 int n = 4; / / D c l a r a t i o n e t i n i t i a l i s a t i o n
2 int nCarre ; / / D c l a r a t i o n s e u l e
En Java la dclaration des variables est obligatoire et une fois dclare dun certain type, une
variable ne peut plus en changer.
Pour pouvoir tre utilise, une variable doit tre initialise.
Exemple 2 (Erreur de compilation).
Un exemple de code posant problme :
1
2

int nCarre ;
System . out . println ( nCarre ) ; / / A f f i c h e l a v a l e u r d e n C a r r e
Ce code ne compile pas car la variable nCarre na pas t initialise.

1.2

Types de variables

type
byte
short
int
long
float
double
char
boolean

espace mmoire
1 octet
2 octets
4 octets
8 octets
4 octets
8 octets

description
entier entre 128 et 127
entier entre 32 768 et 32 767
entier entre 2 109 et 2 109
entier entre 9 1018 et 9 1018
nombre virgule flottante
nombre virgule flottante
un caractre par exemple a
false ou true

Remarques :
pour le type long, il faut ajouter un L la fin du nombre : long AL = 9460700000000000
L;
pour le type float, il faut ajouter un f : float pi=3.141592653f;
pour le type double, on ajoute un d ou plus simplement un .0 si ncessaire.

T. Rey

Page 3

Notes de cours

Initiation Java

MOOC EPFL

Pour convertir une variable dun type en un autre on le caste :


1 float a = 10.5 f , b =3 f , q ;
2 q = a/b; // c e r s u l t a t donne 3 . 5
3 int qe = ( int ) ( a / b ) ; / / c e r s u l t a t d o n n e 3 ( o n n e g a r d e q u e l a
partie

1.3

entire )

Rgles et conventions

Quelques rgles pour nommer les variables :


le nom ne peut tre constitu que de lettres, de chiffres et des symboles _ et $ ;
le premier caractre ne peut pas tre un chiffre ;
le nom ne peut pas tre un mot rserv par le langage Java ;
le nom est sensible la casse (majuscules/minuscules non-quivalentes)
Exercice 1.
Parmi les noms de variables suivants, lesquels sont valides en Java ?
maVariable, maVariable2, maVar-2, long, 3elements, ma Variable, maVar_2$
Par convention, un nom de variable commence par une minuscule et il faut dans la mesure du
possible lui donner un nom significatif : viter var1, var2, var3, . . . mais prfrer cote, aire,
ageDuCapitaine, . . .

1.4

Affectations

Laffectation consiste donner une valeur une variable (ou en modifier le contenu).
Exemple 3.
nCarre = n * n;
Laffectation seffectue en deux temps :
lexpression droite du signe = est value ;
le rsultat de cette valuation est ensuite stocke dans la variable indique gauche du
signe =.
Ceci permet dcrire par exemple : n = n + 1; qui incrmente la variable n de 1.
Attention : ceci implique que les instructions a = b; et b = a; ne sont pas quivalentes !

1.5

Dclaration de constantes

Il peut arriver que la valeur dune variable ne doive pas changer au cours de lexcution dun
programme ; dans ce cas, on ajoute le mot-cl final devant la dclaration :
1

final double pi = 3.141592;


Dans ce cas, linstruction pi = 3.14; donne une erreur la compilation.

T. Rey

Page 4

Notes de cours

Initiation Java

1.6

MOOC EPFL

Variables : lecture - criture

Quelques exercices. . .
Dans chaque cas, quaffiche le programme ?
1
2
3
4

int a = 2;
int b = 1;
b = a * ( b + 2) ;
System . out . println ( a + " , " + b ) ;
A : a, b

1
2
3
4
5

B : 1, 2

C : 2, 1

D : 2, 6

int a = 1;
int b = 2;
a = b;
b = a;
System . out . println ( a + " , " + b ) ;
A : 1, 1
B : 1, 2
C : 2, 1
D : 2, 2
Lire une valeur au clavier :
Il faut commencer par importer la classe Scanner par :
import java.util.scanner;
On peut maintenant crer un objet Scanner quon va appeler clavier par exemple :
Scanner clavier = new Scanner(System.in) ;
clavier est dsormais une variable quon peut utiliser pour demander un int, un double, . . . :
int a = clavier.nextInt();
Lecture dune ligne complte :
String chaine = clavier.nextLine();
Attention avec nextLine() :

1 int i = clavier . nextInt () ;


2 String s1 = clavier . nextLine () ;
3 String s2 = clavier . nextLine () ;
En saisissant :
1 25 euros
2 23 euros
On aura : i contient 25, s1 contient euros et s2 contient 23 euros.
En saisissant :
1 25
2 euros
3 23 euros

T. Rey

Page 5

Notes de cours

Initiation Java

MOOC EPFL

On aura : i contient 25, s1 est vide et s2 contient euros.


car nextLine() lit ce qui suit 25 jusqu la fin de la ligne, cest--dire rien !

1.7

Oprateurs

criture scientifique : double x = 1.3e3 donne x la valeur 1,3 103 = 1 300.


Oprateurs +=, -=, *= et /= :
a += 5; est quivalent a = a + 5; idem pour les autres
Dans le cas des int, il existe loprateur modulo, not %, qui renvoie le reste de la division
euclidienne :
11 % 4 renvoie 3 car 11 = 2 4 + 3.
Toujours dans le cas des entiers, il existe les oprateurs ++ et -- qui permettent dincrmenter
et de dcrmenter une variable :
++i; est quivalent i += 1; ou encore i = i + 1;
Attention aux types :
1 double x = 1.5;
2 int n = 3 * x ; / / P r o v o q u e u n e e r r e u r !
Il faut crire int n = 3 * (int)x; mais dans ce cas le contenu de n est 3 1 = 3.
1 int note1 = 4;
2 int note2 = 5;
3 double moy = ( note1 + note2 ) / 2;
Dans ce cas, moy contient 4.0 et non pas 4.5. Solutions possibles :
1
2
3
4

double moy = note1 + note2 ;


moy /= 2;
/ / OU :

double moy = ( note1 + note2 ) / 2.0;


Fonctions et constantes mathmatiques :
prcder le nom de la fonction/constante de Math : double angle = 10 * Math.PI; et double
s = Math.sin(angle);

2
2.1

Branchements et conditions
Branchements conditionnels

Exemple 4.
Un exemple suffisamment parlant. . .
1 int n = 5;
2 if ( n < 10) { / / B l o c s i " v r a i "
3
System . out . println (" Nombre strictement infrieur 10 ") ;

T. Rey

Page 6

Notes de cours

Initiation Java

MOOC EPFL

4 } else { / / B l o c s i " f a u x "


5
System . out . println (" Nombre suprieur ou gal 10 ") ;
6
// A u t r e s i n s t r u c t i o n s p o s s i b l e s
7 }

2.2

Oprateurs

2.2.1

Oprateurs de comparaison

Oprateur
<
>
==
<=
>=
!=
2.2.2

Signification
infrieur
suprieur
gal
infrieur ou gal
suprieur ou gal
diffrent de

Oprateurs logiques

Un oprateur logique est un oprateur qui spare deux conditions pour en former une seule :
((n >= 1) && (n <= 10)) est la condition testant si n est compris entre 1 et 10 (inclus).
Nom
ET
OU
NON

Notation Java
&&
||
!

vrai si
les deux conditions sont vraies
au moins une des deux conditions est vraie
la condition qui le suit est fausse

Exemple 5.
((n < 5)|| (n > 15)) : cette condition est vraie lorsque n est infrieur 5 ou quil est suprieur 15 (ici, il ne peut pas tre les deux en mme temps !).
!(n == 5) : cette condition est vraie lorsque n nest pas gal 5 ; elle est quivalente la
condition (n != 5).

2.3

Erreurs courantes

Liste non exhaustives de quelques erreurs viter :


erreur dans un test dgalit = la place de == ;
le ; qui suit immdiatement le if () :
1
2
3
4
5

/ / Faux c a r

le

i n d i q u e que

le

t r a i t e m e n t du

if

est

fini

if ( n > 5) ; { / / c e b l o c s e r a e x e c u t d a n s t o u s l e s c a s
System . out . println (" plus grand que 5") ;
}
// C o r r e c t

T. Rey

Page 7

Notes de cours

Initiation Java
6 if ( n > 5) { / / c e b l o c n e s e r a e x e c u t q u e s i
est

MOOC EPFL
la

condition

remplie

7
System . out . println (" plus grand que 5") ;
8 }
oublier les accolades qui entourent le bloc : lindentation ne suffit pas !

2.4

Le type boolean

Dans le tableau dcrivant les types de variables (paragraphe 1.2), on a vu le type boolean ; ce
type peut prendre deux valeurs : true et false.
On peut affecter une valeur une variable de type boolean directement (en lui affectant true
ou false) ou grce une condition :
1
2
3
4

int a =
boolean
boolean
boolean

3
3.1

5 , b = 2;
continue = true ;
testEgalite = ( a == b ) ;
testPetit = ( a < b ) ;

Itrations
La boucle for

Elle permet de raliser un nombre donn de fois le mme bloc dinstructions. Le programme
suivant affiche les carrs des cinq premiers entiers :
1 for ( int i = 0; i < 5; ++ i ) {
2
System . out . println (" Le carr de " + i + " vaut " + ( i * i ) ) ;
3 }
Attention, la variable i nest dfinie qu lintrieur de la boucle.
Structure gnrale :
1 for ( dclaration_initialisation ; condition ; incrmentation ) {
2
Bloc d instructions
3 }
Si la condition ne devient jamais fausse, la boucle se rpte indfiniment !

3.2

Les boucles while

Un exemple parlant :
1 int n ;
2 do {

T. Rey

Page 8

Notes de cours

Initiation Java

MOOC EPFL

3
System . out . println (" Saisir un nombre strictement positif ") ;
4
n = clavier . nextInt () ;
5 } while ( n <= 0) ;
Le contenu du bloc sera rpt tant que la variable n ne contiendra pas un nombre strictement
positif. Remarques :
les instructions du bloc sont excutes au moins une fois ;
les parenthses autour de la condition sont obligatoires ;
si la condition ne devient jamais fausse, les instructions sont rptes indfiniment !
Il existe une variante o la condition est teste avant lexcution du bloc :
1
2
3
4
5
6
7

double capital = 1000.0 , taux = 3.0;


int annee = 0;
while ( capital <= 2000) {
capital *= (1 + taux /100) ;
++ annee ;
}
System . out . println (" Le capital dpasse 2000 euros aprs " + n + "
annes ") ;
Cette fois la condition est teste avant lexcution du bloc. Remarques :
il se peut que le bloc ne soit jamais excut ;
les parenthses autour de la condition sont obligatoires ;
si la condition ne devient jamais fausse, les instructions sont rptes indfiniment !

3.3

Les blocs

En Java, les instructions peuvent tre regroupes en blocs. Ils sont identifis par des accolades
{ et }.
Si on dfinit une variable lintrieur dun bloc elle ne peut tre utilise qu lintrieur de ce
bloc ; on parle alors de variable locale au bloc.
On peut dfinir deux variables ayant le mme nom dans deux blocs diffrents condition que
lun ne soit pas inclus dans lautre.

4
4.1

Tableaux
Dfinition

Un tableau est une collection finie de variables ou dobjets de mme nature. Il existe deux types
de tableaux, ceux dont la taille est connue au dpart et ceux dont la taille peut varier au cours
de lexecution du programme (les ArrayList que nous verrons dans la section 6).

T. Rey

Page 9

Notes de cours

Initiation Java

MOOC EPFL

Dfinition dun tableau :


Linstruction int[] monTableau; dfinit un tableau dentiers appel monTableau. Pour rserver la place ncessaire en mmoire, il faut linitialiser, soit en lui donnant une taille, soit en lui
donnant un contenu :
1 int [] monTableau ; / / D f i n i t i o n
2 monTableau = new int [10]; / / R s e r v a t i o n d e l a p l a c e m m o i r e p o u r
10 e n t i e r s
/ / OU BIEN :

3
4 monTableau = {2 , 4 , 6 , 8 , 10}; / / R s e r v a t i o n + r e m p l i s s a g e
Situation en mmoire
Attention, la variable monTableau ne contient pas les diffrentes valeurs des lments du tableau
mais une adresse (ou une rfrence) vers laquelle pointe le tableau.
Ainsi, linstruction System.out.print(monTableau); affichera cette adresse (et non pas les
lments contenus dans le tableau).
Valeurs par dfaut
Chaque lment du tableau reoit une valeur par dfaut lors de sa construction avec new :
type primitif
int
double
boolean
char
objet quelconque

4.2

valeur par dfaut


0
0.0
false
\u0000
null

Traitements sur les tableaux

Le tableau est donc une sorte de variable indice (lindice est plac entre crochets). On peut
affecter une valeur (du mme type que celui du tableau) un lment du tableau ainsi :
monTableau[3] = 45;
Attention, si la taille du tableau est n, les indices sont compris entre 0 et n-1 !
Affichage des lments :
Pour afficher les lments dun tableau, on doit faire appel une boucle. Deux possibilits :
1
2
3
4
5
6
7

int [] monTableau = {2 ,4 ,6 ,8};


for ( int element : monTableau ) {
System . out . println ( element ) ;
}
/ / OU BIEN :

for ( int i =0; i < monTableau . length ; ++ i ) {


System . out . println ( monTableau [ i ]) ;}

T. Rey

Page 10

Notes de cours

Initiation Java

MOOC EPFL

Dans le premier cas, on ne peut pas modifier la valeur de llment du tableau et on ne peut
pas faire appel lindice de element, ce type de boucle nest utile que pour lire les lments
dun tableau (lorsquon na pas besoin de les modifier).
noter : monTableau.length donne la taille du tableau (son nombre dlments remplis ou
pas).

4.3

Type de base Type volu

Dans le cas dune variable de type de base (int, double, . . .) laffectation est facilement comprhensible :
1 int a = 3 , b = 2;
2 a = b;
3 b = 5;
On obtient : a et b qui contiennnent respectivement 2 et 5 : la ligne 3 (b = 5;) naffecte pas le
contenu de a.
Par contre, pour les types volus, on considre le code suivant :
1
2
3
4

int [] a = new int [3];


int [] b ;
b = a;
a [0] = 0; a [1] = 2; a [2] = 4;
Alors, le tableau b contiendra (0,2,4). En effet, la ligne 3 (b = a;) affecte b ladresse du
tableau a ainsi les deux variables a et b pointent vers le mme tableau en mmoire : ds quon
en modifie un, lautre est modifi aussi.
Si on souhaite crer un deuxime tableau b qui est initialis avec les valeurs du tableau a mais
qui ne sera pas modifi lorsquon modifiera le tableau a, le code est par exemple :

1
2
3
4
5

int [] a = {2 ,4 ,6 ,8 ,10};
int [] b = new int [ a . length ];
for ( int i =0; i < a . length ; ++ i ) {
b [ i ] = a [ i ];
}
Le mme problme survient avec loprateur == : dans lexemple prcdent, les deux tableaux a
et b ont exactement le mme contenu pourtant lexpression (a == b) vaut false car a et b ne
pointent pas vers la mme adresse. On rencontrera la mme chose avec les chanes de caractres
(section 5).

4.4

Tableaux de dimension multiple

Pour dclarer un tel tableau, il suffit dajouter une paire de crochets [] :

T. Rey

Page 11

Notes de cours

Initiation Java

MOOC EPFL

1 int [][] tabMult ;


Une fois initialis, pour chaque i, llment tabMult[i] est lui mme un tableau (mais une
seule dimension).
Initialisation :
Comme pour les tableaux une dimension, on peut procder directement :
1 int [][] tableau = {
2
{0 , 1 , 2 , 3 , 18} ,
3
{8 , 7 , 14} ,
4
{10 , 9 , 5 , 4}
5 };
Dans ce cas, tableau[1] contient 8 7 14
Attention lappel tableau[1][3] provoque une erreur java.lang.ArrayIndexOutOfBoundsException:
Alors que tableau[0][3] est correct.
On peut aussi dclarer un tableau sans connaitre les lments (dans ce cas, le tableau est
obligatoirement rectangle ) :
1 int [][] tableau = new int [5][4];
Ce tableau double est constitu de 5 tableaux unidimensionnel de taille 4. On peut le remplir
par une double boucle :
1 int [][] tableau = new int [5][4];
2 for ( int i =0; i <5; ++ i ) {
3
for ( int j =0; j <4; ++ j ) {
4
tableau [ i ][ j ] = i * j ;
5
}
6 }
Mme chose pour laffichage du tableau prcdent :
1 for ( int [] tab : tableau ) {
2
for ( int element : tab ) {
3
System . out . print (" " + element + ";") ;
4
}
5
System . out . println () ;
6 }

T. Rey

Page 12

Notes de cours

Initiation Java

MOOC EPFL

Les chanes de caractres

5.1

Dfinitions

Les chanes de caractres sont dfinies par le type String.


1 String maChaine ;
2 maChaine = " Coucou !";
3 String autreChaine = " Bonjour ";
Une chane est constitue de caractres dont il existe un type : char.
1 char c1 = a ;
2 char c2 = \n ; / / S a u t d e l i g n e
Une variable chaine de type String contient une adresse vers la chane pourtant, contrairement
aux tableaux, linstruction System.out.println(chaine) affiche bien le contenu de la chane
et non pas son adresse. Tant mieux !

5.2

Oprations

La concatnation consiste ajouter bout bout deux (ou plusieurs) chanes de caractres.
On peut mme concatner avec dautres types (mais de base) :
1
2
3
4

int num = 1;
String nom = " Rey ";
String prenom = " Thomas ";
String identifiant = num + " : " + prenom + " " + nom ;
La concatnation ne modifie pas les chanes, elle les recopie dans une autre zone de la mmoire
(a aura de limportance plus loin. . .).
Quelques mthodes qui sappliquent aux chanes
Si chaine est une variable de type String, on peut lui appliquer une mthode ainsi : chaine
.nomDeMethode(args);. Quelques exemples (dans le tableau suivant str, str1, str2 sont des
chanes de caractres) :
Instruction ou mthode
str.length();
str = str1 + str2;
char c = str.charAt(4);
int i = str.indexOf(c);
str = str1.substring(3,6)

T. Rey

Explication
donne la longueur (le nombre de caractres) de la
chane str
concatne les deux chanes (elles sont mises bout
bout )
donne le 5e caractre (celui dindice 4) de la chane
str
donne lindice de la premire apparition du caractre c
extrait de la chane str1 les caractres dindices 3
5 inclus

Page 13

Notes de cours

Initiation Java
Instruction ou mthode
str1="Chocolat";
str=str1.substring(3,6)
str1.equals(str2);
str1 == str2)
str.toUpperCase();
str.toLowerCase();
str1.compareTo(str2);

5.3

MOOC EPFL

Explication
str contient "col"
donne un boolen qui permet de tester si les deux
chanes ont le mme contenu
donne un boolen qui permet de tester si les deux
chanes ont la mme adresse
met toute la chane str en majuscules
met toute la chane str en minuscules
compare dans lordre lexicographique (voir aussi
str1.compareToIgnoreCase(str2);)

galits

Remarque : Les littraux de type String occupent une zone mmoire unique dans le Pool
des littraux :
1 String chaine1 = " oui ";
2 String chaine2 = " oui "; / / p o i n t e v e r s l a mme a d r e s s e q u e
chaine1

3 System . out . println (( chaine1 == chaine2 ) ) ; / / a f f i c h e

true

Comme pour les tableaux, une variable de type String contient une adresse qui pointe vers la
chane proprement dite. Par exemple :
1
2
3
4
5
6

String chaine1 = " coucou ";


String chaine2 = chaine1 ;
String chaine3 = " cou " + " cou ";
String chaine3 = " coucou ";
System . out . println ( chaine1 == chaine2 ) ; / / t r u e : mme a d r e s s e
System . out . println ( chaine1 == chaine4 ) ; / / t r u e : mme a d r e s s e
dans

le

Pool des

littraux

7 System . out . println ( chaine1 == chaine3 ) ; / / f a l s e


diffrentes

chanes

m a i s d e mme c o n t e n u

8 System . out . println ( chaine1 . equals ( chaine3 ) ) ; / / t r u e : o n t e s t e


galit

des

contenus

Les tableaux dynamiques

Un tableau dynamique (ou ArrayList) est une collection de donnes homognes dont le nombre
peut varier au cours du droulement du programme. On peut par exemple retirer ou ajouter
des lments au tableau.

T. Rey

Page 14

Notes de cours

Initiation Java

MOOC EPFL

Un pralable, importer la bibliothque adquate par la ligne import java.util.ArrayList;


au dbut du programme.
Les donnes dun ArrayList sont obligatoirement dun type volu, ainsi, on ne peut pas crer
de tableau dynamique dint ou de double ou en tout cas pas directement.
Dclaration et initialisation :
1 ArrayList < String > monTabDynamique = new ArrayList < String >() ;
On peut remplacer String par nimporte quel autre type volu (quon reconnait gnralement
sa majuscule).
Mthodes spcifiques :
Rsum des mthodes applicables sous la forme monTabDynamique.nomDeLaMethode(args);
Action
Nom de la mthode
size()
donne la taille actuelle du tableau
donne llment dindice i
get(i)
set(i, valeur)
fixe llment dindice i valeur
true si vide et false sinon
isEmpty()
clear()
transforme en tableau vide
add(valeur)
ajoute valeur la fin du tableau
retire llment dindice i
remove(i)
contains(valeur)
true si le tableau contient un lment gal valeur
Et les tableaux dynamiques dentiers, doubles, . . . ?
Il existe des types volus correspondants aux int, double, . . . : il sagit des types Integer,
Double, . . . Ouf !
Attention :
1
2
3
4

ArrayList < Integer > monTab = new ArrayList < Integer >() ;
monTab . add (2000) ;
monTab . add (2000) ;
System . out . println ( monTab . get (0) == monTab . get (1) ) ; / / A f f i c h e
false

5 System . out . println (( monTab . get (0) ) . equals ( monTab . get (1) ) ) ; / /
Affiche

true

cf ce qui se passe pour les String ou les tableaux (on compare des adresses et non pas des
valeurs dans le premier cas).

T. Rey

Page 15

Notes de cours

Initiation Java

MOOC EPFL

Les fonctions/mthodes

Une fonction ou une mthode permet dviter la duplication du code (copier-coller) et ainsi de :
raccourcir le code ;
le rendre plus facile comprendre ;
faciliter la maintenance (on na pas modifier plusieurs fois la mme portion de code).
Exemple 6.
1 int score ( double tempsJeu , double points ) { / / l a f o n c t i o n r e n v o i e
un i n t

2
int leScore = 0;
3
if ( tempsJeu != 0) {
4
leScore = ( int ) ( points / tempsJeu ) ;
5
}
6 return leScore ;
7 }

7.1

Dfinition

Une fonction est une portion de programme rutilisable ou importante en soi. Elle est caractrise par :
un type : cest ce quon renvoie au reste du programme ;
un nom qui dsignera la fonction ;
des paramtres qui sont les entres envoyes la fonction par le programme ;
un corps qui contient des instructions.
En langage orient objet comme Java, on parle plutt de mthode que de fonction.
Une mthode qui ne renvoie pas de rsultat est de type void. Dans une telle mthode, linstruction return arrte la mthode.

7.2

Appel une mthode

Lors de lappel une mthode :


valuation des expressions ;
affectation aux arguments ;
excution du corps de la mthode ;
valuation de lexpression en retour ;
affectation de cette valeur lexpression dappel.
Dans une mthode appele par valeur = maMethode(arg1);, largument arg1 peut-il tre
modifi ?
OUI si largument arg1 est pass par rfrence ; cest le cas pour les tableaux ou les objets ;
NON si largument est pass par valeur (cest le cas pour les types de base).

T. Rey

Page 16

Notes de cours

Initiation Java

MOOC EPFL

Par exemple si arg1 est un tableau, linstruction arg1[i] = 3; dans la mthode modifie durablement la valeur de llment i du tableau arg1. Par contre si tab est un autre tableau de
mme type, linstruction arg1 = tab ne modifie pas durablement arg1 car cest ladresse qui
est modifie et non pas le tableau initial.

7.3

Mthodologie

Avant de commencer crire le corps dune mthode, il faut se poser les bonnes questions :
que doit faire la mthode ?
quels argument lui passer ?
quel est le type de retour attendu (String, int, . . .) ou pas de retour (type void) ?
comment crire ce que doit faire la mthode ?
Dernier point :
Une mthode peut tre surcharge cest--dire quon crit plusieurs mthodes ayant le
mme nom mais qui avec des arguments diffrents (en types ou en nombre). Par exemple dans
un programme qui tabit des factures, on peut imaginer une mthode ajoutArticle(String
nom, double prix) qui ajouterait la facture un article dont on passe le nom et le prix et une
mthode de mme nom ajoutArticle(String nom, double prix, int quantite) quifait la
mme chose mais multipli par la quantit.

T. Rey

Page 17

Notes de cours