Partage
  • Partager sur Facebook
  • Partager sur Twitter

TP Garage Besoin d'aide sur la fin

ArrayList, Serialiation, Sauvegarde.

Sujet résolu
    17 janvier 2018 à 18:03:27

    Je galère là, j'ai cherché sur Internet mais là je vois pas. Je vous donne toute mes classes:

    Classe de test:

    public class Main {
        public static void main(String[] args) {
            Garage garage = new Garage();
            System.out.println(garage);
    
            Vehicule lag1 = new Lagouna();
            lag1.setMoteur(new MoteurEssence("150 Chevaux", 10256d));
            lag1.addOption(new GPS());
            lag1.addOption(new SiegeChauffant());
            lag1.addOption(new VitreElectrique());
            garage.addVoiture(lag1);
    
            Vehicule A300B_2 = new A300B();
            A300B_2.setMoteur(new MoteurElectrique("1500 W", 1234d));
            A300B_2.addOption(new Climatisation());
            A300B_2.addOption(new BarreDeToit());
            A300B_2.addOption(new SiegeChauffant());
            garage.addVoiture(A300B_2);
    
            Vehicule d4_1 = new D4();
            d4_1.setMoteur(new MoteurDiesel("200 Hdi", 25684.80d));
            d4_1.addOption(new BarreDeToit());
            d4_1.addOption(new Climatisation());
            d4_1.addOption(new GPS());
            garage.addVoiture(d4_1);
    
            Vehicule lag2 = new Lagouna();
            lag2.setMoteur(new MoteurDiesel("500 Hdi", 456987d));
            garage.addVoiture(lag2);
    
            Vehicule A300B_1 = new A300B();
            A300B_1.setMoteur(new MoteurHybride("ESSENCE/Electrique", 12345.95d));
            A300B_1.addOption(new VitreElectrique());
            A300B_1.addOption(new BarreDeToit());
            garage.addVoiture(A300B_1);
    
            Vehicule d4_2 = new D4();
            d4_2.setMoteur(new MoteurElectrique("100 KW", 1224d));
            d4_2.addOption(new SiegeChauffant());
            d4_2.addOption(new BarreDeToit());
            d4_2.addOption(new Climatisation());
            d4_2.addOption(new GPS());
            d4_2.addOption(new VitreElectrique());
            garage.addVoiture(d4_2);
    
        }
    }

    Classe Vehicule

    import java.io.Serializable;
    import java.util.ArrayList;
    import java.util.List;
    
    public class Vehicule implements Serializable {
    
        public double prix;
        public String nom;
        public List<Option> options = new ArrayList<>();
        public Marque marque;
        public Moteur moteur;
    
        public Vehicule() {
    
        }
    
        public Vehicule(double prix, String nom, List<Option> Options, Marque nomMarque)
        {
            this.prix = prix;
            this.nom = nom;
            this.options = Options;
            this.marque = nomMarque;
    
        }
    
        public void setMoteur(Moteur m) {
            this.moteur = m;
        }
    
        public String toString(){
            String str = " + Voiture " + getMarque() + " : " + getNom() + moteur.toString() + " (" + getPrix() + "€) " + getOption() +
                    " d'un valeur totale de " + getPrixTotal() + "€";
            return str;
        }
    
        public double getPrixTotal() {
            double x = 0;
            for(int i = 0; i < this.options.size(); i++) {
                x += this.options.get(i).getPrix();
            }
            return (x + getPrix());
        }
    
        public List<Option> getOption() {
            return options;
        }
    
        public void addOption(Option opt) {
            options.add(opt);
        }
    
        public Marque getMarque() {
            return marque;
        }
    
        public double getPrix() {
            return prix;
        }
    
        public String getNom() {
            return nom;
        }
    }
    

    Classe Option et 1 exemple d'option:

    import java.io.Serializable;
    
    public interface Option extends Serializable {
        public double getPrix();
        public String toString();
    }
    
    public class VitreElectrique implements Option {
        @Override
        public double getPrix() {
            return 212.35;
        }
    
        @Override
        public String toString() {
            return "Vitre electrique (" + getPrix() + "€)";
        }
    }
    

    Les classes enum: TypeMoteur et Marque:

    public enum Marque {
        PIGEOT,
        RENO,
        TROEN;
    }
    public enum TypeMoteur {
        HYBRIDE,
        ESSENCE,
        ELECTRIQUE,
        DIESEL;
    }
    

    Classe Moteur et 1 exemple:

    import java.io.Serializable;
    
    public class Moteur implements Serializable {
    
        public double prix;
        public String cylindre;
        public TypeMoteur type;
    
        public Moteur(String cylindre, double prix) {
            this.cylindre = cylindre;
            this.prix = prix;
        }
    
        public String toString() {
            String str = " Moteur " + getType() + " " + getCylindre();
            return str;
        }
    
        public double getPrix() {
            return prix;
        }
    
        public String getCylindre() {
            return cylindre;
        }
    
        public TypeMoteur getType() {
            return type;
        }
    }
    
    public class MoteurDiesel extends Moteur {
    
        public MoteurDiesel(String cylindre, double prix) {
            super(cylindre, prix);
        }
    
        public TypeMoteur getType() {
            return TypeMoteur.DIESEL;
        }
    }

    Et enfin la classe à problème, j'ai nommer GARAGE!!!!

    import java.io.*;
    import java.util.ArrayList;
    import java.util.List;
    
    public class Garage {
    
        List<Vehicule> voiture = new ArrayList<>();
        ObjectInputStream ois;
        ObjectOutputStream oos;
        File file = new File("garage.txt");
    
        public Garage() {
    
        }
    
        public void addVoiture(Vehicule voit) {
            voiture.add(voit);
            try {
                oos = new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream(file, true)));
                oos.writeObject(voit);
                oos.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
    
        }
    
        public void erreurFichier() {
            System.err.println("Aucune voiture sauvegardée!");
        }
    
        public String toString() {
            String str = "*************************\n* Garage OpenClassrooms *\n*************************\n";
            try {
                ois = new ObjectInputStream(new BufferedInputStream(new FileInputStream(file)));
                try {
                    str += (ois.readObject()).toString();
    
                } catch (ClassNotFoundException e) {
                    e.printStackTrace();
                }
                ois.close();
    
            } catch (IOException e) {
                erreurFichier();
            }
    
            return str;
        }
    }
    

    Alors plusieurs problèmes et question:

    • Dans la classe de Test il y a:
      Garage garage = new Garage();
      System.out.println(garage);
      
      puis la déclaration des voitures. Ma question est à quoi sert l'ArrayList puisque que je rajoute les voitures à celle-ci après avoir println le garage?
    •  J'arrive à sauvegarder toute les voitures. Mais je ne peux en lire qu'une seule grâce à:
      try {
                  ois = new ObjectInputStream(new BufferedInputStream(new FileInputStream(file)));
                  try {
                /*ICI*/str += (ois.readObject()).toString();
      
                  } catch (ClassNotFoundException e) {
                      e.printStackTrace();
                  }
                  ois.close();
      
              } catch (IOException e) {
                  erreurFichier();
              }
      Ici je pense que l'ArrayList aurait pu servir en fesant en boucle for avec pour paramètre Vehicule v:voitures. Mais puisque que je lui donne des valeurs après avoir println. Elle ne sert à rien.

    Merci de votre coopération et désolé si le sujet et répété des dizaines et dizaines de fois mais là je trouve vraiment pas.









    • Partager sur Facebook
    • Partager sur Twitter
      17 janvier 2018 à 18:31:34

      Pourla premiere question, de quelle liste parle tu?

      Ensuite il faut que tu recuperes toute les voitures dans la liste et que tu les affiches ensuite.

      • Partager sur Facebook
      • Partager sur Twitter
        18 janvier 2018 à 6:55:48

        Bonjour,

        Pour la première question, en effet tu affiches un garage sans voiture à ce niveau du code, il aurait mieux valu faire le println après l'ajout des voitures

        Pour la serialisation, soit tu sérialises carrément le garage, sinon tu serializes la liste des voitures (mais toute la liste à chaque ajout).

        • Partager sur Facebook
        • Partager sur Twitter
          20 janvier 2018 à 11:51:12

          Je peux pas mettre le println du Garage à la fin, il faut utiliser la sauvegarde... Du coup j'ai tout mis dans addVoiture:
          import java.io.*;
          import java.util.ArrayList;
          import java.util.List;
          
          public class Garage {
          
              List<Vehicule> voiture = new ArrayList<>();
              ObjectInputStream ois;
              ObjectOutputStream oos;
          
              public void addVoiture(Vehicule voit) {
                  voiture.add(voit);
                  try {
                      oos = new ObjectOutputStream(
                              new BufferedOutputStream(
                                      new FileOutputStream(
                                              new File("garage.txt"))));
                      oos.writeObject(voit);
                      oos.close();
                      ois = new ObjectInputStream(
                              new BufferedInputStream(
                                      new FileInputStream(
                                              new File("garage.txt"))));
                      try {
                          System.out.println(((Vehicule)ois.readObject()).toString());
                      } catch (ClassNotFoundException e) {
                          e.printStackTrace();
                      }
                      ois.close();
          
                  } catch (FileNotFoundException e) {
                      e.printStackTrace();
                  } catch (IOException e) {
                      e.printStackTrace();
                  }
          
              }
          
              public String toString() {
                  String str = "*************************\n* Garage OpenClassrooms *\n*************************\n";
                  return str;
              }
          }
          
          Enfin merci quand même.
          • Partager sur Facebook
          • Partager sur Twitter

          TP Garage Besoin d'aide sur la fin

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown