Beruflich Dokumente
Kultur Dokumente
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.
.
.
.
.
.
.
.
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
.
.
.
.
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
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
1.3
entire )
Rgles et conventions
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
T. Rey
Page 4
Notes de cours
Initiation Java
1.6
MOOC EPFL
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() :
T. Rey
Page 5
Notes de cours
Initiation Java
MOOC EPFL
1.7
Oprateurs
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
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
/ / 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
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
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
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
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
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
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
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
T. Rey
Page 11
Notes de cours
Initiation Java
MOOC EPFL
T. Rey
Page 12
Notes de cours
Initiation Java
MOOC EPFL
5.1
Dfinitions
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
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
le
Pool des
littraux
chanes
m a i s d e mme c o n t e n u
des
contenus
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
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
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