Introduction au Java – BFA
Cours 1
Stéphane Airiau
Université Paris-Dauphine
Cours 1– (Stéphane Airiau) Java 1
Aujourd’hui
ë Eléments de base
ou bien : (presque) tout ce dont vous avez besoin pour ré-écrire les algo-
rithmes vus en cours d’algorithmique sans utiliser des objets !
Variables, opérateurs, type d’une expression
Tests, boucles
Tableaux
méthodes
ë Une introduction à la programmation objet
créer un objet
compiler et exécuter
Cours 1– (Stéphane Airiau) Java 2
Organisation du cours
Les slides et les notes de cours seront postés à cette page
[Link]
Cours 1– (Stéphane Airiau) Java 3
Instructions et commentaires
1 // la suite est un commentaire
1 /* ceci est un commentaire
2 sur plusieurs
3 lignes */
Une instruction est une phrase qui respecte la grammaire de Java.
Une instruction se termine toujours par un point virgule ;
Cours 1– (Stéphane Airiau) Java 4
Types élémentaires
type nombre
interval de valeurs
élémentaire de bits
boolean 1 deux valeurs true et false
byte 8 un entier entre -128 et 127
short 16 un entier entre -215 =−32768 et 215 − 1=32767
int 32 un entier entre -231 ≈ −2.1 · 109 et 231 − 1 ≈ 2.1 · 109
long 64 un entier entre -263 ≈ −9.2 · 1018 et 263 − 1 ≈ 9.2 · 1018
char 16 caractère unicode, il y a 65536 codes
float 32 nombre flottant norme IEEE
double 64 nombre flottant norme IEEE
Cours 1– (Stéphane Airiau) Java 5
Variables : déclaration et initialisation
déclaration simple :
<type> <nom>;
déclaration avec affectation :
<type> <nom> = <valeur dans le type> | <variable>
| <expression> ;
déclaration multiple :
<type> <nom1 >, <nom2 >, . . . , <nomk >;
déclaration multiple avec affection partielle :
<type> <nom1 >, <nom2 >= <valeur dans le type>, . . . ,
<nomk >;
Cours 1– (Stéphane Airiau) Java 6
Exemples
1 short population ;
2 population = 30000;
Cours 1– (Stéphane Airiau) Java 7
Exemples
1 short population ;
2 population = 30000;
1 short population = 1.000.000 ;
Cours 1– (Stéphane Airiau) Java 8
Exemples
1 short population ;
2 population = 30000;
1 short population = 1.000.000 ;
1 long nbParticules = [Link] ;
Cours 1– (Stéphane Airiau) Java 9
Exemples
1 short population ;
2 population = 30000;
1 short population = 1.000.000 ;
1 long nbParticules = [Link] ;
1 long nbParticules = 10.000.000.000L ;
Cours 1– (Stéphane Airiau) Java 10
Exemples
1 short population ;
2 population = 30000;
1 short population = 1.000.000 ;
1 long nbParticules = [Link] ;
1 long nbParticules = 10.000.000.000L ;
1 char lettre = ’c’ ;
Cours 1– (Stéphane Airiau) Java 11
Exemples
1 short population ;
2 population = 30000;
1 short population = 1.000.000 ;
1 long nbParticules = [Link] ;
1 long nbParticules = 10.000.000.000L ;
1 char lettre = ’c’ ;
1 boolean test = true;
2 test = false;
Cours 1– (Stéphane Airiau) Java 12
Transtypage ou cast
On a la situation suivante :
1 <type1 > <nom1 > = <valeur1 >;
2 <type2 > <nom2 > = <nom1 >;
La conversion ou cast peut rester implicite si le <type1 > est « moins
fort » que le <type2 >
1 int i = 10;
2 double x = i;
La conversion doit devenir explicite si le <type1 > est « strictement
plus fort » que le <type2 > : il faut indiquer au compilateur
d’effectuer la conversion.
1 double x= 3.1416;
2 int i = (int)x;
Cours 1– (Stéphane Airiau) Java 13
Opérateurs unaires
Opérateur priorité action exemples
+ 1 signe positif +a; +7
- 1 signe négatif -a; -(a-b); -7
! 1 négation logique !(a<b);
++ affectation et incrément de 1 n++;++n;
−− affectation et incrément de 1 n++; −−i;
Cours 1– (Stéphane Airiau) Java 14
Opérateurs binaires
Opérateur priorité action exemples
* 2 multiplication a * i
/ 2 division n/10
% 3 reste de la division entière k%n
+ 3 addition 1+2
- 3 soustraction x-5
< 5 strictement inférieur i<n
<= 5 inférieur ou égal i <= n
> 5 strictement supérieur i < n
>= 5 supérieur ou égal i >= n
== 6 égalité i==j
!= 6 différent i!=j
& 7 conjonction (et logique) (i<j) & (i<n)
| 9 disjonction (ou logique) (i<j) | (i<n)
&& 10 conjonction optimisée (i<j) && (i<n)
|| 11 disjonction optimisée (i<j) || (i<n)
= affectation x = 10; x=n;
+=, -= affectation et incrément i += 2; j-=4
Cours 1– (Stéphane Airiau) Java 15
Exemple
1 int i=2, j = i++ ;
2 i=2 ;
3 j= ++i ;
Attention à ne pas utiliser = pour faire un test d’égalité!
Cours 1– (Stéphane Airiau) Java 16
Opérateur conditionnel ternaire
1 result = uneCondition ? value1 : value2;
Si le test (une expression booléenne) uneCondition est vérifié,
alors la variable result prend la valeur value1,
sinon elle prend la valeur value2.
1 double x,y, r=1.0;
2 ...
3 boolean interieur = x*x + y*y < r ? true : false
Cours 1– (Stéphane Airiau) Java 17
Type d’une expression
Le code suivant est-il correct ?
1 int i = 5,j;
2 double x = 5.0;
3 j=i/2;
4 j=x/2;
Cours 1– (Stéphane Airiau) Java 18
Type d’une expression
Le code suivant est-il correct ?
1 int i = 5,j;
2 double x = 5.0;
3 j=i/2;
4 j=x/2;
1 double x=2.75;
2 int y = (int) x * 2;
3 int z = (int) (x *2);
Quelles sont les valeurs de y et z ?
Cours 1– (Stéphane Airiau) Java 19
Les Tableaux
Déclaration
1 <type> [] ligne;
2 <type> [][] rectangle;
3 <type> [][][] cube;
Création d’un tableau : il faut connaître la taille du tableau.
1 <type> [] ligne = new <type>[<taille1 >];
2 <type> [][] rectangle =
3 new <type>[<taille2 >][<taille3 >];
La taille du tableau : [Link]
Attention ! le premier élément d’un tableau a pour index 0, et donc le
dernier élément a pour index length-1.
Accès aux éléments du tableau avec [] :
rectangle[3][4] + cube[1][2][5];
Cours 1– (Stéphane Airiau) Java 20
Exemples
1 int[][][] cube = new int[3][4][5];
2 int[][] rectangle = cube[2];
3 int n1 = [Link];
4 int n2 = cube[0].length;
5 int n3 = cube[0][0].length;
Initialisation possible avec une syntaxe de type « liste » :
1 1 1 1
0 1 1 1
premiers : 2 3 5 7 11 13 17 19 triangle :
0 0 1 1
0 0 0 1
1 int[] premiers = {2, 3, 5, 7, 11, 13, 17, 19 };
2 int[][] triangle = {{1,1,1,1}, { 0,1,1,1},
3 { 0, 0, 1, 1}, {0, 0, 0, 1} } ;
Cours 1– (Stéphane Airiau) Java 21
Blocs
Un bloc rassemble des instructions.
Les variables déclarées dans un bloc interne ne sont pas connues dans un
bloc plus externe.
1 int a,b=10;
2 {
3 int d=2*b;
4 {
5 int e=b+d;
5 a=e*d;
6 {
5 int g= b+ d*e;
6 }
6 }
7 }
a et b sont connus partout.
d est connu seulement dans la partie rouge
e est connu seulement dans la partie blue
g est connu seulement dans la partie verte
Cours 1– (Stéphane Airiau) Java 22
La structure if . . . then . . . else
1 if ( <expression booléenne> )
2 <bloc d’instructions à exécuter
3 si la condition est satisfaite>
4 else
5 <bloc d’instructions à exécuter
6 si la condition n’est pas satisfaite>
1 int gains,payment,encaissement,invest;
2 // opérations qui modifient la variable gains
3 ...
4 if (gains<0)
5 payment = gains;
6 else if (gains > 10) {
7 encaissement = 10;
8 invest = gains-10;
9 }
10 else
11 encaissement = gains;
Cours 1– (Stéphane Airiau) Java 23
Choix multiples
1 int choix;
2 ...
3 // l’utilisateur modifie la valeur de choix
4 ...
5 switch(choix) {
6 case 1:
7 //instructions pour le choix 1
8 ...
9 break;
10 case 2:
11 //instructions pour le choix 2
12 ...
13 break;
14 default
15 // instructions dans le reste des cas
16 ...
17 }
Le switch peut s’effectuer sur deux types de variables : int et char. Depuis la
version 7, on peut aussi utiliser une chaîne de caractères
Cours 1– (Stéphane Airiau) Java 24
Boucle for
1 for (<initialisation>
2 <condition de fin> ;
3 <mise à jour des valeurs>)
4 <bloc d’instructions>
que se passe-t-il ?
1 for ( ; ; ){
2 // instructions
3 }
un exemple classique :
0 int n=10;
1 for (int i=0; i< n; i++ ){
2 // instructions
3 }
Cours 1– (Stéphane Airiau) Java 25
autre exemple
0 int n=10;
1 for (int i=0, j=n; j< i; i++; j−− ){
2 // instructions
3 }
Cours 1– (Stéphane Airiau) Java 26
Boucle while
1 while(<condition>)
2 <bloc d’instructions>
Le bloc d’instructions est exécuté tant que la condition est satisfaite.
un exemple qui va essayer de déterminer si la suite définie par u : n → rn
converge :
1 double epsilon = 0.0000001;
2 double r = 0.75, u=1;
3 while( u-u*r <= -epsilon && u - u* r >= epsilon)
4 u = u * r;
Cours 1– (Stéphane Airiau) Java 27
Boucle do . . . while
1 do
2 <bloc d’instructions>
3 while(<condition>);
Attention : ne pas oublier le ; à la fin du while !
1 double epsilon = 0.0000001;
2 double r = 0.75, u=1;
3 do
4 u = u * r;
5 while ( -epsilon >= u-u*r || u - u* r >= epsilon);
Cours 1– (Stéphane Airiau) Java 28
choix du type de de la boucle
généralement, si on connait le nombre d’itérations, on utilise une
boucle for.
qu’est-ce qui est plus élégant ?
qu’est-ce qui sera le plus facile à lire pour un autre lecteur ?
ex :
chercher un élément dans un tableau ?
chercher l’élément le plus grand d’un tableau ?
déterminer si un nombre est premier ?
Cours 1– (Stéphane Airiau) Java 29
Méthodes
But : rassembler une suite d’instructions que l’on répète dans le code.
en utilisant des méthodes, le code devient
plus lisible
moins long
si on veut modifier le code, il n’y a plus qu’un seul endroit à
changer.
Cours 1– (Stéphane Airiau) Java 30
Méthode
1 public static <type de retour> <nom>
2 ( <liste de paramètres>) {
3 corps de la méthode : suite d’instructions
4 }
Le sens de public et static seront vus plus tard dans le cours
l’ordre des arguments est important !
si la méthode ne retourne rien, son type de retour est void.
sinon, on retourne la valeur en utilisant le mot-clé return.
choisir un nom de méthodes parlant
Le nom et la liste d’arguments identifient de manière (presque) unique
une méthode.
ë On appelle signature le nom et la liste des arguments d’une méthode.
Cours 1– (Stéphane Airiau) Java 31
Exemple
1 public static int max( int[] tableau) {
2 int m= tableau[0];
3 for (int i=1;i<[Link]; i++){
4 if (tableau[i] > m)
5 m = tableau[i];
6 }
7 return m;
8 }
Appel de la méthode
1 int tab = {7, 12, 15, 9, 11, 17, 13};
2 int m = max(tab);
Cours 1– (Stéphane Airiau) Java 32
Surcharge
nom de méthode + liste d’arguments = signature
La signature est unique.
ë On peut utiliser le même nom mais avoir une liste d’arguments diffé-
rente
on appelle cette possibilité la surcharge de la méthode.
1 public static double max( double[] tableau) {
2 double m= tableau[0];
3 for (int i=1;i<[Link]; i++){
4 if (tableau[i] > m)
5 m = tableau[i];
6 }
7 return m;
8 }
Cours 1– (Stéphane Airiau) Java 33
Passage des arguments de types primitifs
1 public int f(int n){
2 n = 3 * n * n -2 *n + 1
3 if (n > 0)
4 return n;
5 else
6 return 0;
7 }
1 int i=13;
2 int j= f(i);
Quelle est la valeur de i ?
Le passage des arguments se fait par valeur (i.e. on copie la valeur de la
variable passée en arguments).
Cours 1– (Stéphane Airiau) Java 34