Java : fondamentaux
Mohammed OUANAN
Plan
1 Variables
Typage statique
Typage dynamique
2 Opérations sur les variables
Variables numériques
Variables textuelles
3 Classe Math
4 Lecture d’une saisie
5 Structures conditionnelles
if
if ... else
if ... else if ... else
switch
Expression ternaire
Mohammed OUANAN
Plan
6 Structures itératives
while
do ... while
for
7 Tableaux
Tableaux a` une dimension
Tableaux a` deux dimensions
8 Constantes
9 Méthodes
Mohammed OUANAN
Variables
Java
Une variable ?
Pointeur vers une zone mémoire
Permettant de stocker une ou plusieurs données
Pouvant avoir plusieurs valeurs différentes dans un programme
Mohammed OUANAN 4 / 104
Variables
Java
Une variable ?
Pointeur vers une zone mémoire
Permettant de stocker une ou plusieurs données
Pouvant avoir plusieurs valeurs différentes dans un programme
Java : langage de programmation fortement typé
Il faut préciser le type de chaque variable
Une variable peut avoir de valeurs différentes mais ne peut
changer de type.
Mohammed OUANAN 4 / 104
Variables
Java
Deux modes de typage en Java
Statique : type précisé àla déclaration de la variable
Dynamique : variable déclarée avec le mot-clé var ⇒ type
déterminé dynamiquement à partir de la valeur initiale. [disponible
depuis Java 11]
Mohammed OUANAN
Variables
Java
Nom de variables en Java
Utiliser le Camel Case
Premier caractère : lettre (ni ni $)
Caractère espace non autorisé
Underscore non autorisé comme nom de variable depuis Java 9
Privilégier les noms en relation avec le contexte
Ne pas choisir un mot-clé du langage
Ne pas choisir un ancien mot-clé du langage comme goto ou const
(liste de mots-clés : [Link]
java/nutsandbolts/_keywords.html)
Sensible à la casse
Mohammed OUANAN
Variables Typage statique
Java
Déclarer une variable
type nomVariable;
Mohammed OUANAN 7 / 104
Variables Typage statique
Java
Déclarer une variable
type nomVariable;
Deux choix possibles pour typer les variables
Types simples (primitifs) : commencent par une lettre en
minuscule
Types objets : commencent par une lettre en majuscule
Mohammed OUANAN 7 / 104
Variables Typage statique
Java
Principaux types primitifs en Java
byte : entier codé sur 1 octet (entre -128 et 127)
short : entier codé sur 2 octets (entre -32 768 et 32 767)
int : entier codé sur 4 octets (entre -2 147 483 648 et 2 147 483 647)
long : entier codé sur 8 octets (entre -9 223 372 036 854 775 808 et +9 223 372 036 854
775 807)
float : nombre à virgule codé sur 4 octets
double : nombre à virgule codé sur 8 octets
boolean : soit true soit false (1 octet)
char : caractère codé sur 2 octet situé entre deux ’
Mohammed OUANAN 8 / 104
Variables Typage statique
Java
Principaux types primitifs en Java
byte : entier codé sur 1 octet (entre -128 et 127)
short : entier codé sur 2 octets (entre -32 768 et 32 767)
int : entier codé sur 4 octets (entre -2 147 483 648 et 2 147 483 647)
long : entier codé sur 8 octets (entre -9 223 372 036 854 775 808 et +9 223 372 036 854
775 807)
float : nombre à virgule codé sur 4 octets
double : nombre à virgule codé sur 8 octets
boolean : soit true soit false (1 octet)
char : caractère codé sur 2 octet situé entre deux ’
Pas de type primitif pour les chaines de caractère.
Mohammed OUANAN 8 / 104
Variables Typage statique
Java
Exemple
int x;
Mohammed OUANAN 9 / 104
Variables Typage statique
Java
Exemple
int x;
Déclarer et initialiser une variable
int x = 5;
Mohammed OUANAN 9 / 104
Variables Typage statique
Java
Exemple
int x;
Déclarer et initialiser une variable
int x = 5;
Ceci est une erreur
byte x = 130;
Mohammed OUANAN 9 / 104
Variables Typage dynamique
Java
Déclarer une variable avec le mot-clé var
var nomVariable = valeurInitiale;
Mohammed OUANAN 10 / 104
Variables Typage dynamique
Java
Déclarer une variable avec le mot-clé var
var nomVariable = valeurInitiale;
Remarque
Une variable déclarée avec le mot-clé var
doit être initialisée
a un type déterminé en fonction de sa valeur initiale
ne peut changer de type
Mohammed OUANAN 10 / 104
Variables Typage dynamique
Java
Exemple
var x = 10;
Mohammed OUANAN 11 / 104
Variables Typage dynamique
Java
Exemple
var x = 10;
Ceci génère une erreur
x = "bonjour";
Mohammed OUANAN 11 / 104
Opéations sur les variables Variables numériques
Java
Pour les variables numériques (int, float...)
= : affectation
+ : addition
- : soustraction
* : multiplication
/ : division
% : reste de la division
Mohammed OUANAN
Opérations sur les variables Variables numériques
Java
Quelques raccourcis
i = i + 1 ⇒ i++;
i = i - 1 ⇒ i--;
i = i + 2 ⇒ i += 2;
i = i - 2 ⇒ i -= 2;
...
Mohammed OUANAN
Opérations sur les variables Variables numériques
Java
Exemple de post-incrémentation
int i = 2;
int j = i++;
[Link](i); // affiche 3
[Link](j); // affiche 2
Mohammed OUANAN 14 / 104
Opérations sur les variables Variables numériques
Java
Exemple de post-incrémentation
int i = 2;
int j = i++;
[Link](i); // affiche 3
[Link](j); // affiche 2
Exemple de pre-incrémentation
int i = 2;
int j = ++i;
[Link](i); // affiche 3
[Link](j); // affiche 3
Mohammed OUANAN 14 / 104
Opérations sur les variables Variables numériques
Java
Pour convertir le contenu d’une variable (le cast pour les types
compatibles)
int x = 100;
byte z = (byte) x;
[Link](z); // affiche 100
Mohammed OUANAN 15 / 104
Opérations sur les variables Variables numériques
Java
Pour convertir le contenu d’une variable (le cast pour les types
compatibles)
int x = 100;
byte z = (byte) x;
[Link](z); // affiche 100
Attention aux valeurs qui dépassent l’intervalle
int x = 200;
byte z = (byte) x;
[Link](z); // affiche -56
Mohammed OUANAN 15 / 104
Opérations sur les variables Variables numériques
Java
Les emballages (wrapper) de types primitifs (types objets) en Java
Byte pour byte
Short pour short
Long pour long
Integer pour int
Float pour float
Double pour double
Boolean pour boolean
Character pour char
Mohammed OUANAN 16 / 104
Opérations sur les variables Variables numériques
Java
Les emballages (wrapper) de types primitifs (types objets) en Java
Byte pour byte
Short pour short
Long pour long
Integer pour int
Float pour float
Double pour double
Boolean pour boolean
Character pour char
Il existe aussi plusieurs autres types objets : String, Date...
Mohammed OUANAN 16 / 104
Opérations sur les variables Variables numériques
Java
Pourquoi les types primitifs et les types objets ?
Les types primitifs sont moins coûteux en mémoire
Les types objets offrent plusieurs méthodes à appliquer sur les
valeurs : conversion, nombre de caractère...
Toutes les classes wrappers contiennent une méthode
([Link](string)) qui permet de
convertir une chaine de caractère en type primitif de cette classe
Mohammed OUANAN
Opérations sur les variables Variables numériques
Java
Pas besoin de convertir d’un type simple vers son wrapper (ou
inversement)
Integer j = 2;
int k = j;
[Link](k); // affiche 2
int l = 3;
Integer m = l;
[Link](m); // affiche 3
Mohammed OUANAN
Opérations sur les variables Variables numériques
Java
Pour connaitre la valeur max autorisée par un type numérique
[Link](Integer.MAX_VALUE);
// affiche 2147483647
Mohammed OUANAN 19 / 104
Opérations sur les variables Variables numériques
Java
Pour connaitre la valeur max autorisée par un type numérique
[Link](Integer.MAX_VALUE);
// affiche 2147483647
La valeur min
[Link](Integer.MIN_VALUE);
// affiche -2147483648
Mohammed OUANAN 19 / 104
Opérations sur les variables Variables numériques
Java
Pour connaitre la valeur max autorisée par un type numérique
[Link](Integer.MAX_VALUE);
// affiche 2147483647
La valeur min
[Link](Integer.MIN_VALUE);
// affiche -2147483648
Le nombre d’octets
[Link]([Link]);
// affiche 32
Mohammed OUANAN 19 / 104
Opérations sur les variables Variables textuelles
Java
Exemple d’utilisation d’une chaˆıne de caracte`re
String string = new String();
string = "bonjour";
[Link](string); // affiche bonjour
Mohammed OUANAN 20 / 104
Opérations sur les variables Variables textuelles
Java
Exemple d’utilisation d’une chaˆıne de caracte`re
String string = new String();
string = "bonjour";
[Link](string); // affiche bonjour
On a aussi
String string = new String("bonjour");
[Link](string); // affiche bonjour
Mohammed OUANAN 20 / 104
Opérations sur les variables Variables textuelles
Java
Exemple d’utilisation d’une chaine de caractère
String string = new String();
string = "bonjour";
[Link](string); // affiche bonjour
On a aussi
String string = new String("bonjour");
[Link](string); // affiche bonjour
Ou encore
String string = "bonjour";
[Link](string); // affiche bonjour
Mohammed OUANAN 20 / 104
Opérations sur les variables Variables textuelles
Java
Exemple d’utilisation d’une chaˆıne de caracte`re
String string = new String();
string = "bonjour";
[Link](string); // affiche bonjour
On aussi
String string = new String("bonjour");
[Link](string); // affiche bonjour
Ou encore
String string = "bonjour";
[Link](string); // affiche bonjour
Une chaine de caractère doit ere située entre deux "contenu"
Mohammed OUANAN 20 / 104
Opérations sur les variables Variables textuelles
Java
L’opérateur + pour concaténer deux chaines de caractère
String string = "bon";
String string2 = "jour";
[Link](string + string2);
// affiche bonjour
Mohammed OUANAN
Opérations sur les variables Variables textuelles
Java
Quelques methodeś de la classe String
length() : retourne le nombre de caractère de la chaine.
indexOf(x) : retourne l’indice de la première occurrence de la valeur de x dans la
chaˆıne, -1 sinon.
contains() : retourne true si la chaine contient x, false sinon.
charAt(i) : retourne le caractère d’indice i dans la chaine.
substring(i, j) : permet d’extraire une sous-chaine de la chaine à partir de l’indice i
jusqu’au l’indice j - 1
equals(str) : permet de comparer la chaine à str et retourne true en cas d’égalité,
false sinon.
replace(old, new) : permet de remplacer toute occurrence de la chaine old dans la
chaine courante par new et retourne la nouvelle chaine
...
Mohammed OUANAN
Opérations sur les variables Variables textuelles
Java
Pour convertir une chaine de caractère en majuscule
[Link]("bonjour".toUpperCase());
// affiche BONJOUR
Mohammed OUANAN 23 / 104
Opérations sur les variables Variables textuelles
Java
Pour convertir une chaine de caractère en majuscule
[Link]("bonjour".toUpperCase());
// affiche BONJOUR
Pour convertir un caractère en majuscule
[Link]([Link]('a'));
// affiche A
Mohammed OUANAN 23 / 104
Opérations sur les variables Variables textuelles
Java
Exemple : replace(old, new)
String string = "bonjour les bons jours";
String string2 = [Link]("jour", "soir");
[Link](string2);
// bonsoir les bons soirs
Mohammed OUANAN 24 / 104
Opérations sur les variables Variables textuelles
Java
Exemple : replace(old, new)
String string = "bonjour les bons jours";
String string2 = [Link]("jour", "soir");
[Link](string2);
// bonsoir les bons soirs
Exemple : indexOf(str, fromIndex)
String string = "bonjour les bons jours";
int pos = [Link]("bon", 5);
[Link](pos);
// affiche 12
Mohammed OUANAN 24 / 104
Opérations sur les variables Variables textuelles
Java
Exemple : replace(old, new)
String string = "bonjour les bons jours";
String string2 = [Link]("jour", "soir");
[Link](string2);
// bonsoir les bons soirs
Exemple : indexOf(str, fromIndex)
String string = "bonjour les bons jours";
int pos = [Link]("bon", 5);
[Link](pos);
// affiche 12
Exemple : split(regex)
String string = "bonjour les bons jours";
[Link]([Link]([Link](" ")));
// affiche [bonjour, les, bons, jours]
Mohammed OUANAN 24 / 104
Opérations sur les variables Variables textuelles
Java
Ne jamais comparer les String avec ==
String s1 = "Wick";
String s2 = new String("Wick");
String s3 = "Wick";
String s4 = new String("Wick");
[Link](s1 == s2);
// affiche false
[Link](s1 == s3);
// affiche true
[Link](s2 == s4);
// affiche false
Mohammed OUANAN
Opérations sur les variables Variables textuelles
Java
Explication
Les chaines littérales (créées sans l’opérateur new) sont optimisées
dans le pool de chaines, ce qui signifie que si une chaine littérale avec la
même valeur existe déjà, Java réutilisera la référence à cette chaine.
Les chaines créées avec l’opérateur new sont créées explicitement
même si une chaine avec le même contenu existe déjà dans le pool de
chaines.
Mohammed OUANAN
Opérations sur les variables Variables textuelles
Java
Exemple de conversion d’une chaine de caractère
String string = "2";
byte z = [Link](string);
[Link](z); // affiche 2
Mohammed OUANAN 27 / 104
Opérations sur les variables Variables textuelles
Java
Exemple de conversion d’une chaine de caractère
String string = "2";
byte z = [Link](string);
[Link](z); // affiche 2
Ceci déclenche une exception (arrêt d’exécution)
String string = "a";
byte z = [Link](string);
[Link](z);
Le résultat
Exception in thread "main" [Link]: For
input string: "a"
Mohammed OUANAN 27 / 104
Opérations sur les variables Variables textuelles
Java
Exemple de conversion de Integer en String
Integer x = 2;
String string = [Link]();
[Link](string); // affiche 2
Mohammed OUANAN
Opérations sur les variables Variables textuelles
Java
Quatre méthodes pour convertir int en String
int y = 3;
String chaine =((Integer) y).toString();
[Link](chaine); // affiche 3
int z = 4;
String str = [Link](z);
[Link](str); // affiche 4
int t = 5;
String s = [Link](t);
[Link](s); // affiche 5
int u = 6;
String s = "" + u;
[Link](s); // affiche 6
Mohammed OUANAN
Opérations sur les variables Variables textuelles
Java
Attention, le cast entre deux types incompatibles n’est pas
autorisé
int z = 4;
String str =(String) z;
[Link](str);
Mohammed OUANAN
Opérations sur les variables Variables textuelles
Java
Autres types textuels
CharSequence : interface [en lecture seule] utilisée souvent pour typer
les paramètres d’une méthode
StringBuilder : classe permettant de construire des chaines de
caractères muables (mutables) [implémente CharSequence]
String : classe permettant de construire des chaines de caractères
immuables (mutables) [implémente CharSequence]
StringTokenizer : classe permettant de décomposer une chaine de
caractère en tokens selon les séparateurs choisis (plus rapide que
[Link]()) [n’implémente pas CharSequence]
...
Mohammed OUANAN
Opérations sur les variables Variables textuelles
Java
StringBuilder vs String
StringBuilder chars = new StringBuilder("Wick");
[Link]([Link](chars));
// affiche 1510467688
[Link]("y");
[Link]([Link](chars));
// affiche 1510467688
String string = "Wick";
[Link]([Link](string));
// affiche 1995265320
string += "y";
[Link]([Link](string));
// affiche 746292446
[Link]([Link](chars));
// affiche false
Mohammed OUANAN
Classe Math
Java
On peut aussi utiliser les methodeś statiques de la classe Math
[Link](x) : retourne la valeur absolue de x
[Link](x, y) : retourne la x puissance y
[Link](x, y) : retourne le max de x et y
[Link](x, y) : retourne le min de x et y
[Link](x) : retourne la racine carre´ de x
[Link](x), [Link](x) et [Link](x) :
retournent l’arrondi de x
[Link]() : retourne une valeur aléatoire entre 0 et 1
...
Mohammed OUANAN
Classe Math
Java
Exemple avec [Link](x), [Link](x) et [Link](x)
[Link]([Link](1.9)); // affiche 2
[Link]([Link](1.5)); // affiche 2
[Link]([Link](1.4)); // affiche 1
[Link]([Link](1.9)); // affiche 2
[Link]([Link](1.5)); // affiche 2
[Link]([Link](1.4)); // affiche 2
[Link]([Link](1.9)); // affiche 1
[Link]([Link](1.5)); // affiche 1
[Link]([Link](1.4)); // affiche 1
Mohammed OUANAN
Classe Math
Java
Depuis Java 1.5, on peut importer statiquement la classe
import static [Link].*;
Mohammed OUANAN 35 / 104
Classe Math
Java
Depuis Java 1.5, on peut importer statiquement la classe
import static [Link].*;
Et ensuite
[Link](round(1.9)); // affiche 2
[Link](round(1.5)); // affiche 2
[Link](round(1.4)); // affiche 1
[Link](ceil(1.9)); // affiche 2
[Link](ceil(1.5)); // affiche 2
[Link](ceil(1.4)); // affiche 2
[Link](floor(1.9)); // affiche 1
[Link](floor(1.5)); // affiche 1
[Link](floor(1.4)); // affiche 1
Mohammed OUANAN 35 / 104
Lecture d’une saisie
Java
Pour lire une valeur saisie par l’utilisateur dans la console
il faut utiliser la classe Scanner
il faut préciser le type de la valeur a` ré cupérer
Mohammed OUANAN
Lecture d’une saisie
Java
Instancier la classe Scanner
Scanner scanner = new Scanner([Link]);
Mohammed OUANAN 37 / 104
Lecture d’une saisie
Java
Instancier la classe Scanner
Scanner scanner = new Scanner([Link]);
La classe Scanner est signalée en rouge, il faut l’importer
import [Link];
Mohammed OUANAN 37 / 104
Lecture d’une saisie
Java
Instancier la classe Scanner
Scanner scanner = new Scanner([Link]);
La classe Scanner est signalée en rouge, il faut l’importer
import [Link];
Exemple de lecture d’un entier
int i = [Link]();
Mohammed OUANAN 37 / 104
Lecture d’une saisie
Java
Instancier la classe Scanner
Scanner scanner = new Scanner([Link]);
La classe Scanner est signalée en rouge, il faut l’importer
import [Link];
Exemple de lecture d’un entier
int i = [Link]();
Fermer le scanner
[Link]();
Mohammed OUANAN 37 / 104
Lecture d’une saisie
Java
Remarques
Pour lire une chaine de caractère, il faut utiliser la méthode
next() ou nextLine()
Pour lire un nombre réel, il faut utiliser la méthode nextFloat()
...
Mohammed OUANAN
Lecture d’une saisie
Java
Exemple avec next()
Scanner scanner = new Scanner([Link]);
// si on saisit "bonjour tout le monde"
String string = [Link]();
[Link](string);
// affiche bonjour
Mohammed OUANAN 39 / 104
Lecture d’une saisie
Java
Exemple avec next()
Scanner scanner = new Scanner([Link]);
// si on saisit "bonjour tout le monde"
String string = [Link]();
[Link](string);
// affiche bonjour
Exemple avec nextLine()
Scanner scanner = new Scanner([Link]);
// si on saisit "bonjour tout le monde"
String string = [Link]();
[Link](string);
// affiche bonjour tout le monde
Mohammed OUANAN 39 / 104
Lecture d’une saisie
Java
A` chaque appel à next(), on récupère le token suivant
Scanner scanner = new Scanner([Link]);
// si on saisit "bonjour tout le monde"
String string = [Link]();
String s = [Link]();
[Link](s);
// affiche tout
Mohammed OUANAN 40 / 104
Lecture d’une saisie
Java
A` chaque appel à next(), on récupére le token suivant
Scanner scanner = new Scanner([Link]);
// si on saisit "bonjour tout le monde"
String string = [Link]();
String s = [Link]();
[Link](s);
// affiche tout
Le code suivant déclenche une exception car on ne peut affecter la chaine "tout" à un
entier
Scanner scanner = new Scanner([Link]);
// si on saisit "bonjour tout le monde"
String string = [Link]();
int v = [Link]();
[Link](v);
Mohammed OUANAN 40 / 104
Lecture d’une saisie
Java
Il n’existe pas une méthode spécifiques aux caractères, mais on
peut faire
Scanner scanner = new Scanner([Link]);
String string = [Link]();
char c = [Link]().charAt(0);
[Link](c);
Mohammed OUANAN
Structures conditionnelles if
Java
Exécuter si une condition est vraie
if (condition) {
...
}
Mohammed OUANAN 42 / 104
Structures conditionnelles if
Java
Exécuter si une condition est vraie
if (condition) {
...
}
Exemple
var x = 3;
if (x >= 0) {
[Link](x + " est positif");
}
Mohammed OUANAN 42 / 104
Structures conditionnelles if
Java
Exécuter si une condition est vraie
if (condition) {
...
}
Exemple
var x = 3;
if (x >= 0) {
[Link](x + " est positif");
}
Pour les conditions, on utilise les opérateurs de comparaison
Mohammed OUANAN 42 / 104
Structures conditionnelles if
Java
Opérateurs de comparaison
== : pour tester l’é galité
!= : pour tester l’inégalité
> : supérieur à
< : inférieur à
>= : supérieur ou égal à
<= : inférieur ou égal à
Mohammed OUANAN 43 / 104
Structures conditionnelles if
Java
Opérateurs de comparaison
== : pour tester l’é galité
!= : pour tester l’inégalité
> : supérieur à
< : inférieur à
>= : supérieur ou égal à
<= : inférieur ou égal à
En Java, on ne peut comparer deux valeurs de type incompatible.
Mohammed OUANAN 43 / 104
Structures conditionnelles if
Java
Exercice
Écrire un code Java qui demande à l’utilisateur de saisir un entier
positif et qui affiche ensuite sa parité (sans else).
Mohammed OUANAN
Structures conditionnelles if ... else
Java
Exécuter un premier bloc si une condition est vraie, un deuxième sinon (le bloc else)
if (condition1) {
...
}
else {
...
}
Mohammed OUANAN 45 / 104
Structures conditionnelles if ... else
Java
Exécuter un premier bloc si une condition est vraie, un deuxième sinon (le bloc else)
if (condition1) {
...
}
else {
...
}
Exemple
var x = 3;
if (x > 0)
{
[Link](x + " est strictement positif");
}
else
{
[Link](x + " est n´egatif ou nul");
}
Mohammed OUANAN 45 / 104
Structures conditionnelles if ... else
Java
Exercice
É crire un programme Java qui permet de déterminer si une chaine de
caractères saisie par l’utilisateur contient un nombre pair ou impair de
caractères.
Mohammed OUANAN
Structures conditionnelles if ... else if ... else
Java
On peut enchainer les conditions avec else if (et avoir un
troisième bloc voire ... un nième)
if (condition1)
{
...
}
else if (condition2)
{
...
}
...
else
{
...
}
Mohammed OUANAN
Structures conditionnelles if ... else if ... else
Java
Exemple
var x = -3;
if (x > 0)
{
[Link](x + " est strictement positif");
}
else if (x < 0)
{
[Link](x + " est strictement négatif");
}
else
{
[Link](x + " est nul");
}
Mohammed OUANAN
Structures conditionnelles if ... else if ... else
Java
Exercice 1
Écrire un code Java qui
demande à l’utilisateur de saisir deux entiers a et b et un
caractère op (pouvant avoir comme valeurs +, -, * ou /)
affiche le résultat de l’application de op sur a et b. Par exemple, si
a = 5, b = 2 et op = * alors le résultat est 10.
Mohammed OUANAN
Structures conditionnelles if ... else if ... else
Java
Exercice 2
Écrire un code Java qui
demande à l’utilisateur de saisir trois entiers a, b et c
affiche le résultat de l’équation ax2 + bx + c = 0.
Mohammed OUANAN
Structures conditionnelles if ... else if ... else
Java
Opérateurs logiques
&& : et
|| : ou
! : non
ˆ : ou exclusif
Mohammed OUANAN 51 / 104
Structures conditionnelles if ... else if ... else
Java
Opérateurs logiques
&& : et
|| : ou
! : non
ˆ : ou exclusif
Tester plusieurs conditions (en utilisant des opérateurs logiques)
if (condition1 && !condition2 || condition3){
...
}
[else ...]
Mohammed OUANAN 51 / 104
Structures conditionnelles if ... else if ... else
Java
Exercice 1
Écrire un code Java qui
demande à l’utilisateur de saisir une année (un entier),
affiche si l’année saisie est bissextile (voir
[Link]
Mohammed OUANAN
Structures conditionnelles if ... else if ... else
Java
Exercice 2
E´crire un code Java qui
demande à l’utilisateur de saisir deux entiers a et b différents de zéro,
affiche le signe du résultat de la multiplication sans calculer le produit.
Mohammed OUANAN
Structures conditionnelles if ... else if ... else
Java
Exercice 3
Écrire un code Java qui
demande à l’utilisateur de saisir deux entiers a et b,
détermine et affiche si le résultat de l’addition (sans calculer la
somme) est pair ou impair.
Mohammed OUANAN
Structures conditionnelles switch
Java
Structure conditionnelle switch : syntaxe
switch (nomVariable) {
case constante-1:
groupe-instructions-1;
break;
case constante-2:
groupe-instructions-2;
break;
...
case constante-N:
groupe-instructions-N;
break;
default:
groupe-instructions-par-défaut;
}
Mohammed OUANAN
Structures conditionnelles switch
Java
Remarques
Le switch permet seulement de tester l’é galité
Le break permet de quitter le switch une fois un bloc case
exé cuté
Il est possible de regrouper plusieurs case
Le bloc default est facultatif, il sera exécuté si la valeur de la
variable ne correspond a` aucune constante de case
Mohammed OUANAN
Structures conditionnelles switch
Java
Structure conditionnelle avec switch
int x = 5;
switch (x) {
case 1:
[Link]("un");
break;
case 2:
[Link]("deux");
break;
case 3:
[Link]("trois");
break;
default:
[Link]("autre");
}
Mohammed OUANAN
Structures conditionnelles switch
Java
La variable dans switch peut être
de types simples : int, short, byte et char
de type wrappers correspondants : Integer, Short, Byte et Character
de type énumération depuis Java 6
de type chaˆıne de caractère depuis Java 7
Mohammed OUANAN
Structures conditionnelles switch
Java
Si on supprime un break
String x = "2";
switch (x) {
case "1":
[Link]("un");
break;
case "2":
[Link]("deux");
case "3":
[Link]("trois");
break;
default:
[Link]("autre");
}
// affiche deux trois
Mohammed OUANAN
Structures conditionnelles switch
Java
Un multi-case pour un seul traitement [Java 7]
var x = 5;
switch (x) {
case 1:
case 2:
[Link]("un ou deux");
break;
case 3:
[Link]("trois");
break;
case 4:
case 5:
[Link]("quatre ou cinq");
break;
default:
[Link]("autre");
}
Mohammed OUANAN 60 / 104
Structures conditionnelles switch
Java
Un multi-case simplifié [depuis Java 14]
var x = 5;
switch (x) {
case 1, 2:
[Link]("un ou deux");
break;
case 3:
[Link]("trois");
break;
case 4, 5:
[Link]("quatre ou cinq");
break;
default:
[Link]("autre");
}
Mohammed OUANAN
Structures conditionnelles switch
Java
On peut simplifier l’écriture encore plus avec une expression lambda
(->) [depuis Java 14]
var x = 5;
switch (x) {
case 1, 2 -> [Link]("un ou deux");
case 3 -> [Link]("trois");
case 4, 5 -> [Link]("quatre ou cinq");
default -> [Link]("autre");
}
Mohammed OUANAN
Structures conditionnelles switch
Java
Si on a plusieurs instructions, on ajoute { } [Java 14]
var x = 5;
switch (x) {
case 1, 2 -> {
[Link]("un ou");
[Link]("deux");
}
case 3 -> [Link]("trois");
case 4, 5 -> {
[Link]("quatre ou");
[Link]("cinq");
}
default -> [Link]("autre");
}
Mohammed OUANAN
Structures conditionnelles switch
Java
switch peut retourner une valeur [depuis Java 14]
var x = 5;
String result = switch (x) {
case 1, 2 -> {
var tmp = "un ou deux";
yield tmp;
}
case 3 -> "trois";
case 4, 5 -> {
var tmp = "quatre ou cinq";
yield tmp;
}
default -> "autre";
};
[Link](result);
Mohammed OUANAN
Structures conditionnelles switch
Java
Remarques
Les case d’un même switch peuvent retourner des valeurs ayant un
type différent.
Mohammed OUANAN
Structures conditionnelles switch
Java
Exercice
E´crire un programme qui demande à l’utilisateur de saisir l’indice d’un mois (entier
compris entre 1 et 12) et qui retourne le nombre de jours de ce mois
si l’entier est égal a` 1, 3, 5, 7, 8, 10 ou 12 le programme affiche 31
sinon si l’entier est égal à 4, 6, 9 ou 11 le programme affiche 30
sinon si l’entier est égal à 2, le programme demande à l’utilisateur de saisir
l’année et lui retourne 29 si l’année est bissextile, 28 sinon (voir
[Link]
pour toute autre valeur, le programme affiche une erreur
Mohammed OUANAN
Structures conditionnelles Expression ternaire
Java
Simplifions l’écriture avec l’expression ternaire
int x = 2;
String type = (x % 2 == 0) ? "pair" : "impair";
[Link](type); // affiche pair
Mohammed OUANAN 67 / 104
Structures conditionnelles Expression ternaire
Java
Simplifions l’écriture avec l’expression ternaire
int x = 2;
String type = (x % 2 == 0) ? "pair" : "impair";
[Link](type); // affiche pair
En Java, les deux dernières parties d’une expression ternaire
peuvent retourner deux types différents
int x = 2;
var type = (x % 2 == 0) ? true : "impair";
[Link](type); // affiche true
Mohammed OUANAN 67 / 104
Structures itératives while
Java
Boucle while : àchaque itération on teste si la condition est
vraie avant d’accéder aux traitements
while (condition[s]) {
...
}
Mohammed OUANAN 68 / 104
Structures itératives while
Java
Boucle while : à chaque itération on teste si la condition est
vraie avant d’accéder aux traitements
while (condition[s]) {
...
}
Attention aux boucles infinies, vérifier que la condition d’arrêt sera bien
atteinte après un certain nombre d’itérations.
Mohammed OUANAN 68 / 104
Structures itératives while
Java
Exemple
var i = 0;
while (i < 5) {
[Link](i);
i++;
}
Mohammed OUANAN 69 / 104
Structures itératives while
Java
Exemple
var i = 0;
while (i < 5) {
[Link](i);
i++;
}
Le résultat est
0
1
2
3
4
Mohammed OUANAN 69 / 104
Structures itératives while
Java
Exercice 1
Écrire un programme qui permet d’afficher les nombres pairs inférieurs
a` 10.
Mohammed OUANAN
Structures itératives while
Java
Exercice 2
Écrire un code programme qui
demande à l’utilisateur de saisir deux entiers a et b (avec a < b),
afficher les nombres pairs compris entre a et b.
Mohammed OUANAN
Structures itératives while
Java
Exercice 3
Écrire un programme qui demande à l’utilisateur de saisir un entier
positif n et qui calcule puis affiche la somme de tous les entiers positifs
inférieurs a` n.
Mohammed OUANAN
Structures itératives do ... while
Java
La Boucle do ... while exécute le bloc au moins une fois ensuite
elle vérifie la condition
do {
...
}
while (condition[s]);
Mohammed OUANAN 73 / 104
Structures itératives do ... while
Java
La Boucle do ... while exécute le bloc au moins une fois ensuite
elle vérifie la condition
do {
...
}
while (condition[s]);
Attention aux boucles infinies, vérifier que la condition d’arrêt sera bien
atteinte après un certain nombre d’itérations.
Mohammed OUANAN 73 / 104
Structures itératives do ... while
Java
Exemple
var i = 0;
do {
[Link](i);
i++;
} while (i < 5);
Mohammed OUANAN 74 / 104
Structures itératives do ... while
Java
Exemple
var i = 0;
do {
[Link](i);
i++;
} while (i < 5);
Le résultat est
0
1
2
3
4
Mohammed OUANAN 74 / 104
Structures itératives do ... while
Java
Exercice
Écrire un programme qui demande en boucle a` l’utilisateur de saisir un
entier jusqu’à l’obtention de 0 puis affiche la somme de tous ces
entiers saisis.
Mohammed OUANAN
Structures itératives for
Java
Boucle for
for (initialisation; condition[s]; incrémentation) {
...
}
Mohammed OUANAN 76 / 104
Structures itératives for
Java
Boucle for
for (initialisation; condition[s]; incrémentation) {
...
}
Attention aux boucles infinies si vous modifiez la valeur du compteur à
l’intérieur de la boucle.
Mohammed OUANAN 76 / 104
Structures itératives for
Java
Exemple
for (var i = 0; i < 5; i++) {
[Link](i);
}
Mohammed OUANAN 77 / 104
Structures itératives for
Java
Exemple
for (var i = 0; i < 5; i++) {
[Link](i);
}
Le résultat est
0
1
2
3
4
Mohammed OUANAN 77 / 104
Structures itératives for
Java
Exercice 1
Écrire un programme qui permet d’afficher les nombres pairs compris
entre 0 et 10.
Mohammed OUANAN
Structures itératives for
Java
Première solution
for (var i = 0; i < 10; i++) {
if (i % 2 == 0) {
[Link](i);
}
}
Mohammed OUANAN 79 / 104
Structures itératives for
Java
Première solution
for (var i = 0; i < 10; i++) {
if (i % 2 == 0) {
[Link](i);
}
}
Deuxième solution
for (var i = 0; i < 10; i += 2) {
[Link](i);
}
Mohammed OUANAN 79 / 104
Structures itératives for
Java
Étant donnée la chaine de caractères suivante
String maChaine = "Une première phrase. Et voici une
deuxième.";
Mohammed OUANAN 80 / 104
Structures itératives for
Java
Étant donnée la chaine de caractères suivante
String maChaine = "Une première phrase. Et voici une
deuxième.";
Exercice 2
Écrire un programme qui permet de compter le nombre de mots et de
phrases dans maChaine.
Mohammed OUANAN 80 / 104
Structures itératives for
Java
Exercice 3
Écrire un programme qui demande a` l’utilisateur de saisir deux entiers
positifs et qui calcule puis affiche leur plus grand diviseur commun.
Mohammed OUANAN
Tableaux Tableaux a` une dimension
Java
En Java, les tableaux sont statiques
Tous les éléments doivent avoir le même type
Il faut préciser une taille qu’on ne peut dépasser
Mohammed OUANAN 82 / 104
Tableaux Tableaux a` une dimension
Java
En Java, les tableaux sont statiques
Tous les éléments doivent avoir le même type
Il faut préciser une taille qu’on ne peut dépasser
Déclaration d’un tableau : syntaxe
type [] nomTableau = new type[taille];
Mohammed OUANAN 82 / 104
Tableaux Tableaux a` une dimension
Java
En Java, les tableaux sont statiques
Tous les éléments doivent avoir le même type
Il faut préciser une taille qu’on ne peut dépasser
Déclaration d’un tableau : syntaxe
type [] nomTableau = new type[taille];
Déclaration d’un tableau d’entier de taille 2 : exemple
int [] tab = new int[2];
Mohammed OUANAN 82 / 104
Tableaux Tableaux a` une dimension
Java
Affectation de valeurs aux cases de tableau
tab[0] = 5;
tab[1] = 3;
Mohammed OUANAN 83 / 104
Tableaux Tableaux a` une dimension
Java
Affectation de valeurs aux cases de tableau
tab[0] = 5;
tab[1] = 3;
Ceci déclenche une exception
tab[2] = 10;
L’exception
Exception in thread "main" [Link]: 2
at [Link]([Link])
Mohammed OUANAN 83 / 104
Tableaux Tableaux a` une dimension
On peut faire une de´claration + une initialisation
int[] tab = new int[] { 5, 3 };
Mohammed OUANAN 84 / 104
Tableaux Tableaux a` une dimension
On peut faire une de´claration + une initialisation
int[] tab = new int[] { 5, 3 };
On peut faire une déclaration + une initialisation
int [] tab = { 5, 3 };
Comme si la taille du tableau a été fixée e à deux
Mohammed OUANAN 84 / 104
Tableaux Tableaux a` une dimension
On peut faire une de´claration + une initialisation
int[] tab = new int[] { 5, 3 };
On peut faire une de´claration + une initialisation
int [] tab = { 5, 3 };
Comme si la taille du tableau a été fixée a` deux
Donc, ceci déclenche aussi une exception
tab[2] = 10;
L’exception
Exception in thread "main" [Link]: 2
at [Link]([Link])
Mohammed OUANAN 84 / 104
Tableaux Tableaux a` une dimension
Java
En Java, on ne peut afficher le contenu d’un tableau de la manière
suivante
[Link](tab);
// affiche [I@1c4af82c
Mohammed OUANAN 85 / 104
Tableaux Tableaux a` une dimension
Java
En Java, on ne peut afficher le contenu d’un tableau de la manière
suivante
[Link](tab);
// affiche [I@1c4af82c
Mais on peut le convertir en String et ensuite l’afficher
[Link]([Link](tab));
// affiche [5, 3]
Mohammed OUANAN 85 / 104
Tableaux Tableaux a` une dimension
Java
Pour parcourir le tableau
for (int i = 0; i < [Link]; i++){
[Link](tab[i]);
}
Mohammed OUANAN 86 / 104
Tableaux Tableaux a` une dimension
Java
Pour parcourir le tableau
for (int i = 0; i < [Link]; i++){
[Link](tab[i]);
}
Où encore la version simplifiée (foreach)
for (int elt : tab){
[Link](elt);
}
Mohammed OUANAN 86 / 104
Tableaux Tableaux a` deux dimensions
Java
Déclaration d’un tableau à deux dimensions
type[][] nomTableau = new type[nbLignes][nbColonnes];
Mohammed OUANAN 89 / 104
Tableaux Tableaux a` deux dimensions
Java
Déclaration d’un tableau à deux dimensions
type[][] nomTableau = new type[nbLignes][nbColonnes];
Exemple
int[][] tab2dim = new int[2][2];
Mohammed OUANAN 89 / 104
Tableaux Tableaux a` deux dimensions
Java
Déclaration + initialisation
int[][] tab2dim = new int[][]
{
{1, 2},
{3, 4}
};
Mohammed OUANAN 90 / 104
Tableaux Tableaux a` deux dimensions
Java
Déclaration + initialisation
int[][] tab2dim = new int[][]
{
{1, 2},
{3, 4}
};
Ou
int[][] tab2dim =
{
{1, 2},
{3, 4}
};
Mohammed OUANAN 90 / 104
Tableaux Tableaux a` deux dimensions
Java
Parcourir un tableau à deux dimensions
for (int[] ligne : tab2dim) {
for (int elt : ligne) {
[Link](elt);
}
}
Mohammed OUANAN 91 / 104
Tableaux Tableaux a` deux dimensions
Java
Parcourir un tableau à deux dimensions
for (int[] ligne : tab2dim) {
for (int elt : ligne) {
[Link](elt);
}
}
Ou
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 2; j++) {
[Link](tab2dim[i][j]);
}
}
Mohammed OUANAN 91 / 104
Tableaux Tableaux a` deux dimensions
E´tant données les variables suivantes
int valeur = 5;
int[][] matrice =
{
{ 2, 3, 5, 7 },
{ 5, 1, 5, 5 },
{ 4, 2, 9, 5 },
{ 8, 5, 6, 5 }
};
Mohammed OUANAN 92 / 104
Tableaux Tableaux a` deux dimensions
E´tant données les variables suivantes
int valeur = 5;
int[][] matrice =
{
{ 2, 3, 5, 7 },
{ 5, 1, 5, 5 },
{ 4, 2, 9, 5 },
{ 8, 5, 6, 5 }
};
Exercice
E´crire un programme qui
parcourt la matrice précédente,
calcule le nombre d’occurrence de valeur dans chaque ligne de matrice,
stocke le résultat dans un tableau occurrences.
Mohammed OUANAN 92 / 104
Tableaux Tableaux a` deux dimensions
Java
E´tant données les variables suivantes
int valeur = 5;
int[][] matrice =
{
{ 2, 3, 5, 7 },
{ 5, 1, 5, 5 },
{ 4, 2, 9, 5 },
{ 8, 5, 6, 5 }
};
Mohammed OUANAN 93 / 104
Tableaux Tableaux a` deux dimensions
Java
E´tant données les variables suivantes
int valeur = 5;
int[][] matrice =
{
{ 2, 3, 5, 7 },
{ 5, 1, 5, 5 },
{ 4, 2, 9, 5 },
{ 8, 5, 6, 5 }
};
Exercice
E´crire un programme qui permet de déterminer si valeur est présente dans chaque
ligne de matrice.
Mohammed OUANAN 93 / 104
Tableaux Tableaux a` deux dimensions
Java
Exercice
Écrire un programme qui calcule
1 la somme de deux matrices carrées,
2 le produit de deux matrices carrées.
Mohammed OUANAN
Constantes
Java
Une constante
un élément qui ne peut changer de valeur
Mohammed OUANAN 95 / 104
Constantes
Java
Une constante
un élément qui ne peut changer de valeur
Nom de constantes en Java
Utiliser que des lettres en majuscules.
Pour les noms composés, utiliser underscore comme séparateur.
Mohammed OUANAN 95 / 104
Constantes
Java
Pour declareŕ une constante
il faut utiliser le mot-clé final
Mohammed OUANAN 96 / 104
Constantes
Java
Pour declareŕ une constante
il faut utiliser le mot-clé final
Déclaration d’une constante
final double PI = 3.1415;
Mohammed OUANAN 96 / 104
Constantes
Java
Pour declarérune constante
il faut utiliser le mot-clé final
Déclaration d’une constante
final double PI = 3.1415;
L’instruction suivante ne peut être acceptée
PI = 5;
Mohammed OUANAN 96 / 104
Méthodes
Java
Une methodé
visibilité [+ static] + type de retour + nomMéthode([les paramètres]) + son
implémentation
Mohammed OUANAN 97 / 104
Méthodes
Java
Une methodé
visibilité [+ static] + type de retour + nomMéthode([les paramètres]) + son
implémentation
Exemple de déclaration d’une méthode
public static int somme (int a, int b) {
return a + b;
}
Mohammed OUANAN 97 / 104
Méthodes
Java
Une methodé
visibilité [+ static] + type de retour + nomMéthode([les paramètres]) + son
implémentation
Exemple de déclaration d’une méthode
public static int somme (int a, int b) {
return a + b;
}
Exemple d’appel d’une méthode
[Link](somme(2, 3));
// affiche 5
Mohammed OUANAN 97 / 104
Surchargedes
Surcharge des méthodes
méthodes
♦ Les critères de surcharge des méthodes sont:
. Les noms doivent être les mêmes
. Le nombre d’arguments doit être différent, sinon au moins dans
l’ordre un argument doit être d’un type de donnée différent
. Le type de retour ne doit pas être nécessairement différent