Création d'une bibliothèque / TreeSet & Iterator
Bonjour,
Je me présente, je suis étudiant et débutant en java.
J'ai un exercice à réaliser dans le cadre scolaire :
il s'agit de créer une bibliothèque musicale interactive, permettant de lister plusieurs artistes(Artist), avec leurs albums, ...
Je dois créer 5 classes :
-Main :
va lancer le programme en créant simplement une instance de la classe Library,
puis en appelant la méthode run() de cette classe Library
-Library :
La classe Library sera définie de la façon suivante :
— Une bibliothèque qui sera de type TreeSet<Artist> ;
5
— On va définir plusieurs méthodes :
— Une méthode run() qui va initialiser le TreeSet et appeler la méthode displayMenu()
dans une boucle infinie ;
— Une méthode displayMenu() qui va afficher un menu de contrôle de cette bibliothèque.
La saisie de l’utilisateur sera récupérée et, selon la valeur saisie, on va appeler une des
méthodes suivantes. Un exemple de menu est fourni ci-après :
Bienvenue sur votre bibliothèque musicale !
Tapez 1 pour ajouter un artiste à votre collection.
Tapez 2 pour supprimer un artiste de votre collection.
Tapez 3 pour lister tous les artistes.
Tapez 4 pour ajouter un album à un artiste.
Tapez 5 pour retirer un album à un artiste.
Tapez 6 pour lister tous les albums pour un artiste donné.
Des méthodes pour ajouter, supprimer et lister des albums à la bibliothèque, et pour ajouter, supprimer et lister des albums à un artiste.
-Song :
La classe Song sera définie de la façon suivante :
— Une chanson possède deux attributs :
— Un titre (sous forme de chaîne de caractères) ;
— Une durée (sous forme d’un nombre entier représentant le nombre de secondes) ;
— On va définir plusieurs méthodes :
— Le constructeur par défaut ainsi qu’un autre constructeur permettant d’instancier un
objet avec des valeurs précisées en paramètre ;
— Une méthode toString() qui va retourner une chaîne de caractères sous la forme :
titre (mm:ss) ;
— Une méthode convertDuration() qui renvoie une chaîne de caractères au format
mm:ss.
-Album :
La classe Album sera définie de la façon suivante :
— Un album possède trois attributs :
— Un titre (sous forme de chaîne de caratères) ;
— Une année de sortie (un entier) ;
— Des chansons (sous forme de List de chansons) ;
— On va définir le constructeur par défaut ainsi qu’un autre constructeur permettant d’instancer un objet avec des valeurs précisées en paramètre ;
— Une méthode toString() qui va retourner une chaîne de caractères au format suivant :
Titre Album
01 - Titre chanson 1 (mm:ss)
02 - Titre chanson 2 (mm:ss)
03 - Titre chanson 3 (mm:ss)
...
-Artist
La classe Artist sera définie de la façon suivante :
— Un artiste possède trois attributs :
— Un nom (sous forme de chaîne de caractères) ;
— Une valeur booléenne indiquant si l’artiste est toujours actif ou non ;
— Une liste d’albums sous la forme de List<Album> ;
Les codes pour les différentes classes sont les suivantes :
-Main :
Code:
1 2 3 4 5 6 7 8 9
| package cours_classes;
public class Main {
public static void main(String[] args) {
Library Librairie= new Library();
Librairie.run();
}
} |
-Library :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161
| package cours_classes;
import java.security.KeyStore.Entry;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Scanner;
import java.util.Set;
import java.util.TreeSet;
public class Library {
boolean check = false;
TreeSet<Artist> bibliothèque = new TreeSet<>();
ArrayList<Album> listeAlbum = new ArrayList<>();
public void run() {
Scanner scanner = new Scanner(System.in);
do {
displayMethod();
}while(true);
}
public void displayMethod() {
System.out.println("Bienvenue sur votre bibliothèque musicale !\n"+
"Tapez 1 pour ajouter un artiste à votre collection.\n"+
"Tapez 2 pour supprimer un artiste de votre collection.\n"+
"Tapez 3 pour lister tous les artistes.\n"+
"Tapez 4 pour ajouter un album à un artiste.\n"+
"Tapez 5 pour retirer un album à un artiste.\n"+
"Tapez 6 pour lister tous les albums pour un artiste donné.\n"
);
Scanner scanner = new Scanner(System.in);
int nbre = scanner.nextInt();
switch(nbre) {
case 1 :
addArtist();
break;
case 2 :
removeArtist();
break;
case 3 :
listArtists();
break;
case 4 :
addAlbum();
break;
case 5 :
removeAlbum();
break;
case 6 :
listAlbumsforArtists();
break;
}
}
public void addArtist() {
Scanner scanner = new Scanner(System.in);
System.out.println("Quel est le nom de l'artiste que vous souhaitez ajouter?");
String nom = scanner.nextLine();
System.out.println("L'artiste est-il actif?(O/N"
+ ")");
char reponse = scanner.nextLine().charAt(0);
if (reponse =='O') {
check = true;
}
/*System.out.println("Quel est le nombre d'albums que l'artiste a produit?");
int nombre = scanner.nextInt();
scanner.nextLine();
for(int k = 0; k < nombre; k ++) {
System.out.println("Quel est le nom du prochain album de l'artiste?");
String album = scanner.nextLine();
listeAlbum.add(getAlbumByName(album));
}*/
bibliothèque.add(new Artist(nom, check, listeAlbum));
}
public void removeArtist() {
Scanner scanner = new Scanner(System.in);
System.out.println("Quel est l'artiste que vous souhaitez enlever de la liste?");
String ArtistSupprim = scanner.nextLine();
if(bibliothèque.contains(ArtistSupprim)) {
bibliothèque.remove(getArtistByName(ArtistSupprim));
}
}
public Artist getArtistByName(String ArtistSupprim) {
Iterator<Artist> iterator = bibliothèque.iterator();
while(iterator.hasNext()) {
Artist a = iterator.next();
if(a.nom==ArtistSupprim) {
return a;
}
}
return null;
}
public Album getAlbumByName(String albumName) {
Iterator<Album> iterator = listeAlbum.iterator();
while(iterator.hasNext()) {
Album alb = iterator.next();
if(alb.titre==albumName) {
return alb;
}
}
return null;
}
public void listArtists() {
Iterator<Artist> iterator = bibliothèque.iterator();
//ArrayList<Artist> listeArtistes = new ArrayList<>();
while(iterator.hasNext()) {
System.out.println(iterator.next());
}
}
public void addAlbum() {
Scanner scanner = new Scanner(System.in);
System.out.println("Quel est le nom de l'artiste dont vous "+
"souhaitez ajouter un album");
String artiste = scanner.nextLine();
System.out.println("Quel est le nom de l'album que vous souhaitez ajouter?");
String album = scanner.nextLine();
System.out.println("Quelle est l'année de sortie de cet album?");
int anneeDeSortie = scanner.nextInt();
System.out.println("Combien de chansons y a-t-il dans cet album?");
int nombre = scanner.nextInt();
scanner.nextLine();
ArrayList<Song> chansons = new ArrayList<>();
for(int k = 0; k < nombre; k ++) {
chansons.add(createSong());
}
Album albumAjoute = new Album(album, anneeDeSortie, chansons);
}
public Song createSong() {
Scanner scanner = new Scanner(System.in);
System.out.println("Quel est le nom de la chanson que vous souhaitez"+
" ajouter?");
String nomChanson = scanner.nextLine();
System.out.println("Quelle est la durée de la chanson?");
int duree = scanner.nextInt();
Song chanson = new Song(nomChanson, duree);
return chanson;
}
public void removeAlbum() {
Scanner scanner = new Scanner(System.in);
System.out.println("Quel est le nom de l'artiste dont vous souhaitez supprimer "+
"un album");
String artiste = scanner.nextLine();
System.out.println("Quel est le nom de son album à supprimer?");
String nomAlbum = scanner.nextLine();
listeAlbum.remove(getAlbumByName(nomAlbum));
}
public void listAlbumsforArtists() {
Scanner scanner = new Scanner(System.in);
System.out.println("Quel est le nom de l'artiste dont on veut lister les albums?");
String nameArtist = scanner.nextLine();
Iterator<Artist> iterator = bibliothèque.iterator();
while(iterator.hasNext()) {
Artist e = iterator.next();
if(nameArtist==e.getName()) {
System.out.println(e.getAlbums());
}
}
}
} |
-Song :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| package cours_classes;
public class Song {
String titre;
int duree;
public Song(String titre, int duree) {
this.titre=titre;
this.duree=duree;
}
public String toString() {
return(this.titre = " "+"("+this.getConvertedDuration()+")");
}
public String getConvertedDuration() {
if(this.duree<60) {
return(" "+this.duree+" ");
}
else {
int nbreMinutes = this.duree/60;
int nbreSecondes = this.duree%60;
return (" "+nbreMinutes+" : "+nbreSecondes+" ");
}
}
} |
-Artist :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
| package cours_classes;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class Artist implements Comparable{
String nom="Inconnu";
boolean check = false;
ArrayList<Album> listeAlbum = new ArrayList<>();
public Artist(String nom, boolean check, ArrayList<Album> listeAlbum) {
}
public ArrayList<Album> getAlbums(){
return listeAlbum;
}
public String getName(){
return nom;
}
public void addAlbum(Album album) {
listeAlbum.add(album);
}
public void removeAlbum(String albumName) {
listeAlbum.remove(getAlbumByName(albumName));
}
public String toString() {
return nom;
}
public Album getAlbumByName(String albumName) {
Iterator<Album> iterator = listeAlbum.iterator();
while(iterator.hasNext()) {
Album alb = iterator.next();
if(alb.titre==albumName) {
return alb;
}
}
return null;
}
@Override
public int compareTo(Object o) {
Artist other = (Artist) o;
return this.getName().compareTo(other.getName());
}
} |
-Album :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| package cours_classes;
import java.util.ArrayList;
import java.util.List;
public class Album {
String titre;
int anneeDeSortie;
ArrayList<Song> chansons;
public Album(String titre, int anneeDeSortie, List<Song> chansons) {
this.titre=titre;
this.anneeDeSortie=anneeDeSortie;
}
public String toString() {
StringBuilder builder = new StringBuilder();
builder.append(this.titre);
for(Song chanson : this.chansons) {
builder.append("\n\t").append(chanson.toString());
}
return builder.toString();
}
} |
Le problème est le suivant : lorsque j'ai ajouté un artiste à ma bibliothèque, puis, que je tape sur 3 pour afficher l'artiste ajouté, Java me renvoie Inconnu.
J'essaye de comprendre ce qui ne marche pas dans mon code. Sauriez-vous d'où vient le problème rencontré?
En vous remerciant d'avance pour votre réponse.
Je suis désolé par rapport à la taille de mon code qui n'est pas forcément agréable à lire.
Bien cordialement,
Gabriel Enriquez