Egalité suite, String, StringBuilder
Exercice 1 - Point
On cherche à écrire une classe Point stockant un point graphique
en coordonnées cartésiennes (appelons les x et y).
-
Déclarer une classe Point contenant les
deux champs privés x et y.
Puis essayer le code suivant dans le main
de la classe Point.
Point p=new Point();
System.out.println(p.x+" "+p.y);
Expliquer.
-
Créer une classe Main et
déplacer le main de Point
dans la classe Main.
Quel est le problème ?
Comment peut-on le corriger ?
-
Qu'est ce qu'un accesseur ?
Quels sont les acceseurs que l'on doit mettre ici ?
-
Ajouter un constructeur initialisant les coordonnés du point
avec deux paramètres (appelons les px et py)
Indiquer pourquoi il faut déclarer
les champs x et y final.
Quel est le problème avec le code de test.
-
Écrire un autre constructeur qui prend un point en paramètre et
et utilise les coordonnées de celui-ci pour initialiser
le point courant.
Comment le compilateur fait-il pour savoir quel constructeur appelé ?
Exercice 2 - Test d'égalité
En ré-utilisant la classe Point.
Qu'affiche le code ci-dessous :
Point p1=new Point(1,2);
Point p2=p;
Point p3=new Point(1,2);
System.out.println(p1==p2);
System.out.println(p1==p3);
-
Écrire dans la classe Point une méthode isSameAs()
(à vous de trouver la signature exacte de la méthode)
qui renvoie true si deux points ont les mêmes coordonnées.
-
La classe java.util.ArrayList correspond à
un tableau qui s'agrandi dynamiquement.
Executez le code suivant :
public static void main(String[] args){
Point p1=new Point(1,2);
Point p2=p;
Point p3=new Point(1,2);
ArrayList list = new ArrayList();
list.add(p1);
System.out.println(list.indexOf(p2));
System.out.println(list.indexOf(p3));
}
Expliquer le résultat.
Note : ici, le compilateur génère un warning.
Nous verrons dans les prochains TD comment l'éviter.
-
Quel méthode de Point est appelée
par ArrayList.indexOf ?
Lire la doc !!!
-
Modifier la classe Point pour que
indexOf() teste suivant le contenu et
pas suivant les références.
-
Utiliser l'annotation @Override pour vérifier
que vous avez bien typé la méthode ajoutée à Point.
Exercice 3 - En morse. Stop.
Écrire une classe Morse qui permet lors de
son exécution d'afficher les chaînes de caractères
prisent en argument séparé par des "Stop.".
$ java Morse ceci est drole
ceci Stop. est Stop. drole Stop.
-
Utiliser dans un premier temps,
l'opérateur + qui permet la concaténation
de chaînes de caractères.
-
A quoi sert l'objet java.lang.StringBuilder
Pouquoi sa méthode append(String) renvoie un obejt de
type StringBuilder ?
-
Ré-écrire la classe Morse en utilisant
un StringBuilder.
Quelle est l'avantage par rapport à la solution précédente ?
-
Recopier le code suivant dans une classe Test :
public static void main(String[] args) {
String first=args[0];
String second=args[1];
String last=args[2];
System.out.println(first+' '+second+' '+last);
}
Compiler le code puis utilise la commande javap
pour afficher l'assembleur
généré
javap -c Test
Que pouvez vous en déduire ?
Dans quel cas doit-on utiliser StringBuilder.append()
plutôt que le + ?
Rémi Forax - Université de Marne La Vallée