Vous êtes sur la page 1sur 8

Les bases du langage Java

Exercice n° 1 (Hello Groland!)

Écrire un programme Java qui affiche Hello Groland!. Compiler et exécuter ce


programme

Exercice n° 2

En Java, les chaînes de caractères sont représentées par des objets de la classe String,
dont les instances sont non mutables. On souhaite pouvoir convertir des chaînes de
caractères contenant des nombres en valeur entières. Le faire en utilisant la méthode
statique static int parseInt(String) de la classe Integer. Définir une chaîne de
caractères contenant un entier et obtenir sa valeur sous forme d'entier (int). Faire
attention au fait que la méthode parseInt peut lever
l'exception NumberFormatException. Déclarer une chaîne de caractères contenant un
nombre réel et obtenir sa valeur sous la forme d'un flottant (double).

Exercice n° 3 (Tableaux)

 Déclarer deux tableaux t1 et t2 d'entiers.


 Créer pour t1 et t2 des tableaux de 5 entiers.
 Initialiser t2 avec les valeurs 1, 567, -23, 78 et 4.
 Comment faire la déclaration, la création et l'initialisation d'un tableau t3 en une
seule instruction ?
 Écrire une méthode statique pour trouver le plus petit élément d'un tableau.
 Écrire une méthode statique pour trier les éléments d'un tableau.

Exercice n° 4

Écrire une programme prenant sur la ligne de commande une expression


mathématique en notation préfixée, de la forme opérateur nombre nombre et qui
l'évalue.

Exercice n° 5

Écrire une programme qui prend une liste d'entiers sur la ligne de commande, les
recopie dans un tableau d'entiers, trie le tableau puis finalement affiche le contenu du
tableau.

Exercice n° 6 (Références et égalités)


 Créer un tableau t de 4 références sur des chaînes de caractères. Créer une
chaîne de caractères dont le contenu est "Bon". Affecter les 2 premiers éléments
du tableau avec cette chaîne et le troisième avec la chaîne "Bonjour". Créer une
nouvelle chaîne de caractères dont le contenu est à nouveau "Bon" et affecter
cette chaîne au dernier élément du tableau t. Comparer 2 à 2 les éléments du
tableaux en utilisant les méthodes String.equals(), String.compareTo(), et
l'opérateur ==. Que constate-t-on ?
 Concaténer t[0] avec la chaîne "jour" en utilisant la
méthode String.concat() ou l'opérateur +. Comparer 2 à 2 les éléments du
tableaux en utilisant les méthodes String.equals(), String.compareTo(), et
l'opérateur ==. Que constate-t-on ?

Exercice n° 7

 Écrire une classe Point représentant un point dans le plan et possédant un


constructeur Point(int, int), une méthode réalisant une translation, et une
méthode de comparaison de signature boolean sameAs(Point).
 Créer un point et le désigner par deux références p1 et p2.
Comparer p1 et p2 avec l'opérateur == et avec la méthode sameAs. Effectuer une
translation de p1 et refaire les comparaisons. Que constate-t-on ?
 Soit le code suivant
 p1 = new Point(1,1);
 p2 = new Point(1,1);

Comparer à nouveau p1 et p2. Que constate-t-on ? Exécuter l'affectation p1 =


p2. Que devient l'objet qui était référencé par p2.

Exercice n° 8

Déclarer un tableau t1 contenant les valeurs 2, 7, 5, 21 et -7. Recopier t1 dans un


tableau t2. Comparer les tableaux t1 et t2 en utilisant l'opérateur == et la
méthode equals.
Classes et objets

On considère des rectangles dans le plan. Dans un premier temps, on suppose pour
simplifier que les côtés des rectangles sont parallèles aux axes. Un rectangle est donc
complètement déterminé par le point en bas et à gauche et par ses dimensions
horizontale et verticale.

Exercice n° 1 (Rectangle)

Définir une classe Rectangle permettant de manipuler de tels objets. Définir trois
constructeurs prenant respectivement en paramètre 2 points, 1 points et 2 longueurs ou
4 longueurs.

Exercice n° 2

Écrire une méthode surface qui calcule la surface du rectangle. Écrire une
méthode translate qui déplace un rectangle en déplaçant le point en bas et à gauche.
Que se passe-t-il si plusieurs rectangles partagent le même point.

Exercice n° 3

Écrire une méthode contains qui teste si un point donné (en paramètre) est à l'intérieur
du rectangle. Écrire une autre méthode contains qui teste si un rectangle donné est à
l'intérieur du rectangle.

Exercice n° 4

Écrire une méthode sameAs qui teste l'égalité de deux rectangles.

Exercice n° 5

Ajouter à la classe Rectangle un attribut nbr qui comptabilise le nombre d'objets de la


classe Rectangle.

Exercice n° 6

Écrire une méthode hull qui calcule le rectangle englobant d'un ensemble de
rectangles. Cette méthode prend en paramètre un tableau de rectangles et retourne le
plus petit rectangle qui contient tous les rectangles du tableau.

On considère qu'un dessin est constitué d'un ensemble de rectangles.


Exercice n° 7 (Dessins)

Définir une classe Dessin. Chaque objet de cette classe contient un tableau de
rectangles dont la taille est fixée à la construction de l'objet. Au départ, un dessin ne
contient aucun rectangle. Écrire une méthode add qui permet d'ajouter un rectangle à
un dessin.

Exercice n° 8

Écrire des méthodes surface et translate pour la classe Dessin. La surface d'un dessin
est la somme des surfaces de ses rectangles même si ceux-ci se superposent. Translater
un dessin consiste à translater chacun de ses rectangle.

Exercice n° 9

Ajouter à la classe Dessin une méthode hull qui calcule le rectangle englobant des
rectangles du dessin. Afin de pouvoir calculer de manière incrémentale ce rectangle
englobant, ajouter un attribut hullRect à la classe Dessin et modifier les méthodes pour
qu'elles prennent en compte cet attribut.
Héritage, masquage de méthode et liaison tardive

On considère des rectangles donc les côtés ne sont plus nécessairement parallèles aux
axes. Un tel rectangle est vu comme un rectangle aux côtés parallèles qui aurait été
incliné d'un certain angle par rapport à l'horizontale.

Exercice n° 1

En utilisant l'héritage, définir une classe SlantedRectangle permettant de manipuler de


tels objets. Définir des constructeurs appropriés.

Exercice n° 2

Définir une méthode rotate dans l'esprit de la méthode translate.

Exercice n° 3

De quelles méthodes hérite la classe SlantedRectangle ? Redéfinir celles qui le


nécessitent.

Exercice n° 4

Pour chacun des appels de méthode ci-dessous, dire s'il va être compilé correctement
et auquel cas, quelle méthode est appelée effectivement à l'exécution ?
Point p = new Point(1,2);
Rectangle r = new Rectangle(p, 2, 3);
Rectangle t = new SlantedRectangle(p, 2, 3);
SlantedRectangle s = new SlantedRectangle(p, 2, 3);

System.out.println(r.surface());
r.rotate(2);
System.out.println(r.contains(p));

System.out.println(t.surface());
t.rotate(2);
System.out.println(t.contains(p));

System.out.println(s.surface());
s.rotate(2);
System.out.println(s.contains(p));

Exercice n° 5

Est-ce que la classe Dessin définie précédemment peut contenir des rectangle inclinés
? Est-ce que les méthodes surface, contains et hull de la classe Dessin fonctionnent
encore correctement ?
Exercice n° 6

Définir une méthode String toString() dans la classe Rectangle ? Est-ce en fait une
définition ou une redéfinition ? Est-il nécessaire de la redéfinir dans la
classe SlantedRectangle ?

Exercice n° 7

Redéfinir la méthode equals dans les classes Rectangle et SlantedRectangle.

On considère les définitions de classes suivantes


class A {
void f(A o) {
System.out.println("void f(A o) dans A");
}
}
class B extends A {
void f(A o) {
System.out.println("void f(A o) dans B");
}
}

Exercice n° 8

Qu'affiche le fragment de programme suivant ?


A a = new A();
A ab = new B();
B b = new B();

a.f(a);
a.f(ab);
a.f(b);
ab.f(a);
ab.f(ab);
ab.f(b);
b.f(a);
b.f(ab);
b.f(b);

Exercice n° 9

On ajoute maintenant à la classe B la méthode suivante


void f(B o) {
System.out.println("void f(B o) dans B");
}
Est-ce une redéfinition ou une surcharge ? Qu'affiche alors le fragment de
programme de l'exercice 8 ?

Exercice n° 10

On ajoute finalement à la classe A la méthode suivante


void f(B o) {
System.out.println("void f(B o) dans A");
}
Est-ce une redéfinition ou une surcharge ? Qu'affiche alors le fragment de
programme de l'exercice 8 ?

Exercice n° 11

Qu'affiche le fragment de programme suivant ?


System.out.println(a instanceof A);
System.out.println(ab instanceof A);
System.out.println(b instanceof A);

System.out.println(a instanceof B);


System.out.println(ab instanceof B);
System.out.println(b instanceof B);

Exercice n° 12

Dans la classe Rectangle a été définie une méthode boolean contains(Rectangle).


Cette méthode doit-elle être redéfinie dans la classe SlantedRectangle ? Quels cas ne
sont pas couverts par cette redéfinition ? On ajoute alors une méthode boolean
contains(SlantedRectangle) dans les classes Rectangle et SlantedRectangle. Quels
cas ne sont toujours pas couverts par ces ajouts ?

Exercice n° 13

On considère les définitions de classes suivantes


class C {
char ch = 'C';
char getCh() { return ch; }
}
class D extends C {
char ch = 'D';
char getCh() { return ch; }
}
Qu'affiche le fragment de programme suivant ?
C c = new C();
C cd = new D();
D d = new D();

System.out.println(c.ch);
System.out.println(c.getCh());
System.out.println(cd.ch);
System.out.println(cd.getCh());
System.out.println(d.ch);
System.out.println(d.getCh());

Vous aimerez peut-être aussi