Sachant que la classe
Pair est définie comme ceci :
public class Pair {
private final String first;
private final String second;
public Pair(String first, String second) {
this.first=first;
this.second=second;
}
public String getFirst() {
return first;
}
public String getSecond() {
return second;
}
@Override
public String toString() {
return first+" "+second;
}
}
-
Pourquoi le code ci-dessous n'affiche pas ce qu'il faut ?
HashMap<Pair,String> map=new HashMap<Pair,String>();
map.put(new Pair("jean-paul","sartre"),"mort");
map.put(new Pair("elvis","presley"),"vivant");
map.remove(new Pair("elvis","presley"));
System.out.println(map);
-
Que doit-on faire pour résoudre le problème ?
Si vous ne voyez pas d'où ça vient, vous pouvez remplacer l'avant dernière ligne par
System.out.println(map.remove(new Pair("elvis","presley")));
-
Écrire un petit programme qui vous permet, en boucle sur la ligne de commande,
d'entrer sur une ligne 3 mots et d'associer dans la table le 3ème mot (comme valeur) à la
paire constituée des deux premiers (comme clé). Pour chaque "triplet" de mots entré,
le programme affiche soit "nouveau" si la clé n'existait pas dans la table, soit
l'ancienne valeur associée à la clé.
Par exemple, en partant d'une table vide, vous devez obtenir le comportement suivant
(ce qui apparait en gras est saisi par l'utilisateur):
$ java fr.upem.jlb.td08.Pair
jean-paul sartre mort
nouveau
elvis presley vivant
nouveau
elvis presley mort
vivant
jean-paul sartre ressucité
mort
^D
$
Indications:
Pour lire les triplets de mots, vous pouvez utiliser un java.util.Scanner
(lire la documentation) et ses méthodes hasNext() et next(), ou encore hasNextLine().
Votre programme pourra s'arrêter lorsque vous taperez la combinaison de touches "Control-D" (ou ^D)
au clavier, ce qui ferme le flot d'écriture correspondant à l'entrée standard (System.in) de votre programme;
les méthodes has...() de Scanner retournent alors false.
A partir du code de votre classe
LinkedLink générifié
dans l'exercice 3 de la séance précédente, faites en sorte que
cette classe soit
Iterable, et puisse par exemple
être utilisée comme dans le programme suivant, qui lit sur
l'entrée standard des lignes de texte qu'il stocke dans une
LinkedLink, jusqu'à lire une ligne vide. Il affiche alors le nombre de caractères
de chacune des lignes, puis le nombre de caractères total:
L'exécution de ce code doit donner ceci (ce qui apparait
en
gras est saisi par l'utilisateur):
$ java fr.upem.data.main.Iter
bla
bla bla
trucc much
ta tzoin
[ta tzoin, trucc much, bla bla, bla]
[8] : ta tzoin
[10] : trucc much
[7] : bla bla
[3] : bla
Total length: 28
$