Vous êtes sur la page 1sur 9

Programmation Orientée Objet Java Dr Riadh BOUSLIMI

TD n°1
Objectifs
A la fin du TD, l’étudiant sera capable de :
− Identifier et localiser des erreurs dans un programme java
− Analyser, affecter et convertir les types primitifs dans un programme Java
− Résoudre des exercices faisant appel aux structures de contrôle (if..else, switch, for,
while et do while)
Référence bibliographique des exercices :
[R] Exercices en Java: 175 exercices corrigés - Couvre Java 8, Delannoy Claude,
isbn=9782212537932, 2017, Eyrolles
Rappel du cours
− Java est un langage compilé et interprété.
− Java est portable, il peut fonctionner sur n’importe quelle plateforme.
− Une classe java est réutilisable et offre au développeur un gain du temps de développement.
− Un JVM permet d’interpréter le code java.
− JDK est un kit de développement pour programmer avec Java
− javac permet de compiler un programme java et java est une commande pour interpréter un
bytecode qui a été généré depuis la commande javac.
− String est une classe en java
− La syntaxe des structures de contrôle en java est similaire du langage C.
− Une classe est un modèle de définition pour des objets ayant le même ensemble d’attributs,
et le même ensemble d’opérations.
− Un objet est une instance d’une classe. Tout objet admet un état et un comportement.

Exercices
Exercice 1.1(Affectation et conversion) [R, p27]
Soit ces déclarations :
byte b; short p; int n; long q;
final int N=10 ;
float x ; double y ;
Parmi les expressions suivantes, lesquelles sont incorrectes et pourquoi ? Lorsque l’expression
est correcte, citer les conversions éventuellement mises en jeu.
b = n; //1
b = 25; //2
b = 500; //3
x = 2*q; //4
y = b*b; //5
p = b*b; //6
b = b+5; //7
p = 5*N-3; //8

Page | 1
Programmation Orientée Objet Java Dr Riadh BOUSLIMI

Exercice 1.2 (Opérateurs d’incrémentation, de décrémentation et d’affectation élargie ) [R, p28]


Quels résultats fournit ce programme ?
public class OpIncr {
public static void main(String[] args) {
int i, j, n;
i = 0; n = i++;
System.out.println ("A : i = " + i + " n = " + n ) ;
i = 10; n= ++i ;
System.out.println ("B : i = " + i + " n = " + n ) ;
i=20; j=5; n=I ++ * ++ j ;
System.out.println ("C : i = " + i + " j = " + j + " n = " + n ) ;
i = 15 ; n = i += 3 ;
System.out.println ("D : i = " + i + " n = " + n) ;
i = 3 ; j = 5 ; n = i *= --j ;
System.out.println ("E : i = " + i + " j = " + j + " n = " + n) ;
}
}

Exercice 1.3 (Opérateur conditionnel) [R, p32]


Quels résultats fournit ce programme ?
public class OpCond {
public static void main(String[] args) {
int n=10, p=5, q=10 ;
n = p = q = 5 ;
n += p += q ;
System.out.println ("A : n = " + n + " p = " + p + " q = " + q) ;
q = n < p ? n++ : p++ ;
System.out.println ("B : n = " + n + " p = " + p + " q = " + q) ;
q = n > p ? n++ : p++ ;
System.out.println ("C : n = " + n + " p = " + p + " q = " + q) ;
}
}

Exercice 1.4(Passage par argument d’un programme)


Écrire un programme java qui permet de calculer la puissance à partir de deux valeurs réels
fournies en argument du programme.

Indication :
− Utiliser la fonction Math.pow(double, double) : double du package java.lang qui
renvoie la puissance.
− La fonction Xxx.parseXxx(ValChaine) qui permet de convertir une chaine en une valeur
numérique.
Exemple :
String valchaine = "125" ;
int x = Integer.parseInt(valchaine) ; // x = 125

Page | 2
Programmation Orientée Objet Java Dr Riadh BOUSLIMI

Exercice 1.5 (Utilisation de la classe Scanner et Math)


Écrire un programme java qui permet de demander à l’utilisateur de saisir deux valeurs entières
fournies au clavier et d’afficher le maximum.
Indication :
− Utiliser la classe Scanner du package java.util pour introduire n’importe qu’elle
valeur de type primitif ou String. nextXxx() est une méthode pour récupérer une valeur
de type demandé.
Exemple :
import java.util.Scanner ;
public class test{
public static void main(String args[]){
Scanner clavier = new Scanner(System.in);
System.out.print("X=");
int x = clavier.nextInt() ;
System.out.println(x) ;
}
}
− Utiliser la fonction Math.max(double, double) : double du package
java.lang pour récupérer le maximum de deux valeurs.
Exercice 1.6(Structure if)
Écrire un programme java de devinette qui permet de demander à l’utilisateur de saisir une
valeur comprise entre 0 et 10 et d’afficher « Vous avez gagné » si la valeur saisie est égale à la
valeur aléatoire gênée. Et le message « Vous avez perdu » sinon.
Indication :
− Utiliser la méthode Math.random() du package java.lang qui renvoie une valeur
comprise en 0.0 et 1.0.
Exercice 1.7(Structure switch) [R, p36]
Soit le programme suivant :
public class ExoII2 {
public static void main(String[] args) {
int n ;
n = Clavier.lireInt() ;
switch (n) {
case 0 : System.out.println ("Nul") ;
case 1 : case 2 : System.out.println ("Petit") ; break ;
case 3 : case 4 : case 5 : System.out.println ("Moyen") ;
default : System.out.println ("Grand") ;
}
}
}
Quels résultats affiche-t-il lorsqu’on lui fournit en donnée :
1. la valeur 0,
2. la valeur 1,
3. la valeur 4,
4. la valeur 10,
5. la valeur -5.
Page | 3
Programmation Orientée Objet Java Dr Riadh BOUSLIMI

Exercice 1.8 (Méthode static)


1. Ecrire une classe nommée « Factorielle » contenant deux méthodes
− Écrire une méthode itérative intitulé FactoI qui permet de calculer la factorielle à partir
une valeur n positive passée en paramètre.
− Écrire une méthode récursive intitulé FactoR qui permet de calculer la factorielle à
partir une valeur n positive passée en paramètre.
2. Ecrire une class « Test » contenant le programme principal qui permet de demander à
l’utilisateur de saisir une valeur entière positive et d’afficher la factorielle.
3. Si on rajoute le mot clé « static » aux deux méthodes. Comment il sera effectué l’appel via
le programme principal.
NB : Le programme principal doit comporter une vérification de la valeur introduite avant de
calculer la factorielle.
Exercice 1.9 (Réflexion)
Écrire un programme java qui permet d’afficher un triangle isocèle avec des étoiles tout en
demandant à l’utilisateur de saisir le nombre de lignes.

Page | 4
Programmation Orientée Objet Java Dr Riadh BOUSLIMI

Correction du TD n°1

Exercice 1.1
b = n ; //1 Erreur
La conversion de int en byte n’est pas autorisée par affectation.
b = 25; //2 OK
D’une manière générale, la conversion de int en byte n’est pas acceptée par affectation. Mais
une exception a lieu pour les expressions constantes (calculables à la compilation), à condition
que leur valeur soit représentable dans le type d’arrivée, ce qui est manifestement le cas ici.
b = 500 ; //3 Erreur
On est dans la même situation que précédemment, avec cette différence que la valeur 500
n’est pas représentable dans le type byte.
x = 2*q ; //4 OK
Ici, l’expression 2*q est évaluée en effectuant la conversion d’ajustement de type de 2 en
long. Puis le résultat, de type long, est converti dans le type float avant d’être affecté à
x.
y = b*b ; //5 OK
La valeur de l’expression b*b est évaluée en effectuant la promotion numérique de b en int.
Le résultat, de type int, est converti dans le type double avant d’être affecté à y.
p = b*b ; //6 Erreur
Là encore, la valeur de l’expression b*b est de type int, La conversion de int en short est
illégale par affectation.
b = b+5 ; //7 Erreur
La valeur de l’expression b+5 est de type int. La conversion de int en short est illégale par
affectation.
p = 5*N-3; //8 OK
L’expression 5*N-3 est de type int. Mais comme il s’agit d’une expression constante
(calculable à la compilation), sa conversion en short est légale par affectation pour peu que
sa valeur soit représentable dans ce type, ce qui est le cas ici.
Exercice 1.2
A : i = 1 n = 0
B : i = 11 n = 11
C : i = 21 j = 6 n = 120
D : i = 18 n = 18
E : i = 12 j = 4 n = 12
Exercice 1.3
A : n = 15 p = 10 q = 5
B : n = 15 p = 11 q = 10
C : n = 16 p = 11 q = 15

Page | 5
Programmation Orientée Objet Java Dr Riadh BOUSLIMI
Exercice 1.4
1 public class Puissance {
2 public static void main(String args[]) {
3 //récupération de l’argument n°1
4 double x = Double.parseDouble(args[0]);
5 //récupération de l’argument n°1
6 double y = Double.parseDouble(args[1]);
7 //calcul de la puissance
8 double res = Math.pow(x, y);
9 //affichage de la puissance
10 System.out.println("La puissance est:" + res);
11 }
12 }

Application :

Exercice 1.5

1 //importation de la classe Scanner


2 import java.util.Scanner;

3 public class Maximum {

4 public static void main(String args[]){

5 //création d'un objet pour lire les données en entrée


Scanner clavier = new Scanner(System.in);
6
System.out.print("X=");
7
int x = clavier.nextInt() ;//lecture de la valeur de x
8
System.out.print("Y=");
9
int y = clavier.nextInt() ;//lecture de la valeur de y
10
//récupération de la valeur maximale
11
//et conversion de la valeur double en int
12 int max = (int)Math.max(x, y);
13 //affichage de la valeur maximale
14 System.out.println("Le maximum est :" + max);
15 }
16 }

Page | 6
Programmation Orientée Objet Java Dr Riadh BOUSLIMI
Exercice 1.6

1 import java.util.Scanner;
2 public class Devinette {
3 public static void main(String args[]){
4 Scanner clavier = new Scanner(System.in);
5 //récupération de la valeur aléatoire
6 int d= (int) (10* Math.random());
7 System.out.println("Entrer une valeur :");
8 int x = clavier.nextInt();
9 //si la valeur devinée est égale à la valeur saisie
10 if(x==d)
11 System.out.println("Vous avez gagné");
12 else
13 System.out.println("Vous avez perdu, d=" + d);
14 }
15 }

Exercice 1.7
// avec la valeur 0
Nul
Petit

// avec la valeur 1
Petit

// avec la valeur 4
Moyen
Grand

// avec la valeur 10
Grand

// avec la valeur -5
Grand

Page | 7
Programmation Orientée Objet Java Dr Riadh BOUSLIMI
Exercice 1.8
1 //Classe Factorielle
2 public class Factorielle {
3
4 static int FactI(int n){
5 int f=1;
6 for(int i=1;i<=n;i++)
7 f*=i; // f=f*i
8 return f;
9 }
10
11 static int FactR(int n){
12 if(n==1)
13 return 1;
14 else
15 return n*FactR(n-1);
16 }
17 }

1 //Classe Test
2 import java.util.Scanner;
3 public class Test {
4 public static void main(String args[]){
5 Scanner clavier = new Scanner(System.in);
6 int n;
7 //répéter jusqu’à ce que la valeur saisie soit positive
8 do{
9 System.out.print("Entre n=");
10 n = clavier.nextInt();
11 }while(n<=0);
12
13 /*
14 Factorielle f = new Factorielle(); // création d'objet
15 int x = f.FactR(n); // calcul de la factorielle
16 */
17
18 //appel via le nom de la classe si la méthode est statique
19 int x = Factorielle.FactI(n);
20 System.out.println(n+"!="+x);
21 }
22 }

Page | 8
Programmation Orientée Objet Java Dr Riadh BOUSLIMI
Exercice 1.9
1 import java.util.Scanner;
2
3 public class Triangle {
4 public static void main(String[] args) {
5 int n, i, j;
6 System.out.print("Combien de lignes ? ");
7 Scanner x = new Scanner(System.in);
8 n = x.nextInt();
9 for (i = 0; i < n; i++)
10 {
11 for (j = 0; j < n - i - 1; j++)
12 System.out.print(" ");
13 for (j = 0; j <= i * 2; j++)
14 System.out.print("*");
15 System.out.println();
16 }
17 }
18 }

Page | 9

Vous aimerez peut-être aussi