Boucle dans une méthode toString

Boucle dans une méthode toString - Java - Programmation

Marsh Posté le 02-12-2013 à 16:44:36    

Bonjour à tous,
 
Je vous présente mon soucis, j'ai des TPs à finir pour dans quelques semaines et je bloque sur mon dernier exercice.
 
Pour ce qui est ce mon code précédent tout est fonctionnel il me permet d'afficher via une méthode toString des livres de la manière suivante:
 
Livre 3                               // c'est-à-dire que c'est le 3ème livre d'enregistré et Livre provient de mon getClass().getSimpleName()
{
    nom: ...                         // affiche à la place des "..." le nom du livre
    auteur: ...                      // affiche l'auteur du livre
}
 
Et maintenant je souhaite faire une nouvelle méthode toString qui me permet d'afficher, quelque soit le nombre de livre, le contenu de la "bibliothèque" de la façon suivante:
 
Livres: n livres                     // Livres et livres ne changent pas | le n représente le nombre total de livre
 
Livre 1                                // le 1 correspond au premier livre de la "bibliothèque"
{
    nom: ...                          //nom du premier livre
    auteur: ...
}
 
Livre 2
{
    nom: ...
    auteur: ...
}
 
Ainsi de suite
J'ai également un attribut index qui s'incrémente à chaque nouveau livre.  
Voici mon code:
---------------------
Attributs
---------------------
private String nom;
 private String auteur;
 private static int index;
           private int number;
 
---------------------
constructeurs
---------------------
public Livre (String nom, String auteur)
 {
  this.nom = nom;
  this.auteur = auteur;
  index++;
  this.number = index;
   
 }
 
public String getNom()
{
    return nom;
}
et pareil pour les deux autres
---------------------
methodes
---------------------
 
public String toString()
 {
  return getClass().getSimpleName()+getNumber()+" livres";
  for (int index = 0; index < number; index++)
  {
   System.out.println(getClass().getSimpleName();
   System.out.println(getNumber()+"\n{\n\tnom\t: "+getNom()+"\n\tauteur\t: "+getAuteur()+"\n\t" );
  }  
                       return ??
 }
 
Merci d'avance pour vos éventuelles réponses
 
Cordialement Activexkiro

Reply

Marsh Posté le 02-12-2013 à 16:44:36   

Reply

Marsh Posté le 02-12-2013 à 17:12:39    

Remarque en passant : L'index doit être passé en paramètre du constructeur de Livre, pas incrémenté dans ce constructeur, puisque une instance de livre ne partage pas l'index avec les autres instances, est ce que tu me suis ?

Reply

Marsh Posté le 02-12-2013 à 17:18:06    

Je sais comment faire mais je vois pas concrètement ce que cela chance en faite.
Et puis on perd du coup l'incrémentation souhaité dans les questions précédentes.

Reply

Marsh Posté le 02-12-2013 à 18:33:42    

C'est la différence entre une conception propre et objet et une conception "je vais rendre mon devoir à l'arrache".
Par ailleurs la méthode toString liée à l'instance d'un livre est dédiée à retourner une description de l'instance, en surchargeant la méthode par défaut de la classe Object.  
la méthode toString d'une instance de livre se moque des autres instances participant au projet ou à l'appli,
n'a pas à les connaitre, ne doit pas les connaitre.
 
Par contre tu peux avoir un objet LivreCollection  
qui instancies les livres en passant l'index en paramètre
qui place (add) les livres dans une ArrayList de livre (attribut de cette classe)
et qui a une méthode toString.
 
Cette méthode toString :
- affiche le "Livres: n livres"
- puis boucle sur la ArrayList et appelles les méthodes toString de chaque livre.


Message édité par willy le kid le 02-12-2013 à 18:35:53
Reply

Marsh Posté le 02-12-2013 à 18:40:45    

Ok je comprend vaguement ce que vous me dites.
J'essai de visualiser mais j'ai un peu de mal, d'autant plus que nos tp sont censés être sur les cours (du moins jusque là ça toujours été le cas).
 
Or tout ce que vous me proposez avec les arraylist nous n'avons jamais vu.
 
Merci tout de même de vos réponses

Reply

Marsh Posté le 02-12-2013 à 20:29:23    

c'est le prof qui a indiqué "private static int index;" ?
 
Ma proposition, sans structure compliquée ni optimisation
 

Code :
  1. package tp;
  2. public class Livre {
  3.     private String nom;
  4.     private String auteur;
  5.     private int number;
  6.     public Livre (String nom, String auteur, int number)
  7.     {
  8.      this.nom = nom;
  9.      this.auteur = auteur;
  10.      this.number = number;
  11.     }
  12.    
  13.     public String toString(){
  14.      String sTemp = "Livre " + number + " { nom= " + nom + ", auteur=" + auteur +"}" ;
  15.      return sTemp;
  16.     }
  17. }


 

Code :
  1. package tp;
  2. public class LivreCollection {
  3. private Livre[] livreArray;
  4. public static void main(String[] args) {
  5.  LivreCollection livreCollection = new LivreCollection();
  6.  System.out.println(livreCollection.toString());
  7. }
  8. public LivreCollection(){
  9.  livreArray = new Livre[2];
  10.  livreArray[0] = new Livre("Victor Hugo", "Les Misérables", 1);
  11.  livreArray[1] = new Livre("Hergé", "Coke en Stock", 2);
  12. }
  13.     public String toString(){
  14.      String sTemp = "Livres : " + livreArray.length + "\n";
  15.      Livre lTemp;
  16.      for (int l=0 ; l < livreArray.length; l++){
  17.       lTemp= (Livre) livreArray[l];
  18.       sTemp += " " + lTemp.toString() + "\n";
  19.      }
  20.  return sTemp;
  21.     }
  22. }


 
Execute LivreCollection ->

Code :
  1. Livres : 2
  2. Livre 1 { nom= Victor Hugo, auteur=Les Misérables}
  3. Livre 2 { nom= Hergé, auteur=Coke en Stock}


Message édité par willy le kid le 02-12-2013 à 20:44:30
Reply

Marsh Posté le 03-12-2013 à 12:06:59    

Je te remercie Willy pour ton aide précieuse et ton temps !
 
Pour le static effectivement c'est le prof qui nous l'as demandé donc nous sommes en quelques sorte "obliger" de le faire.
 
Je suis en train de tester ton code sur le livreCollection pour le comprendre de A à Z sinon je ne vois pas l'intérêt de le copier.
 
Encore une fois merci pour ton aide.  
Cordialement acitvexkiro

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed