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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 :
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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(); } }
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
Partager