Partage
  • Partager sur Facebook
  • Partager sur Twitter

MOOC Apprenez à programmer en Java

    24 janvier 2016 à 22:46:23

    ThomasGerard a écrit:

    Mon API est une Appli Texte/Image et le problème est qu'il m'est impossible d'afficher l'image


    Tu me dis que le problème vient de la ligne 180, qui est une méthode d'un de tes objets, soit ta fonctionne n'est pas correcte, je ne connais pas ton code, soit ton image n'est pas bien récupérée.

    Par contre, je doute que cela compile, tu fait appelle la méthode length sur CodeD qui est de type int. C'est peu probable.

    Et attention a la notation, je te conseille de te renseigner sur le CamelCase et la syntaxe Java (qui est la même pour bien d'autre langage), une variable doit commencer par une minuscule ;) (ou _ $)

    • Partager sur Facebook
    • Partager sur Twitter
    Un accès premium d'un mois avec le code AXEL-8RR3 C'est cadeau et c'est illimité !
      24 janvier 2016 à 22:57:51

      @ Axel:

      Merci pour tes réponses, je viens juste de commencer la programmation en Java.

      Dans mon code (si tu veux le voir, il est dans les commentaires précédents), j'essaye de transformer le code Ascii de mes chiffres à coder en binaire afin d'ensuite pouvoir appliquer une composante noire ou blanche à mes 0 ou 1 dans le but d'afficher des bandes pour obtenir un code barre.

      Mon code me semble correct, c'est juste l'affichage que je n'obtiens pas, il y a une erreur d’instanciation et de déclaration qui se situerait à cet endroit il me semble

      ImageIO.write(bufMonImage, "gif", new File(""));



      • Partager sur Facebook
      • Partager sur Twitter
        24 janvier 2016 à 23:08:35

        Je te rappelle que ta variable CodeD est déclaré comme un int, mais que tu essaies d'utiliser la méthode length sur cette variable, ce qui n'est pas possible sur un type primitif (char, int, long, ...). Donc ton code ne va pas pouvoir compiler pour commencer.

        Pour la création de ton image, je n'ai pas fait d'image depuis un bout de temps, mais je peux essayer demain dans la journée.

        Je te conseille de nettoyer ton code pour y voir plus clair, de donner des noms plus logique a tes variables, avoir "a b y n m x" est la plus mauvaise des idées pour que quelqu'un comprenne ton travail, ou toi même demain matin d'ailleurs. 

        Continue en MP, pour ne pas abuser sur le forum du cours

        -
        Edité par AxelHuberty 24 janvier 2016 à 23:09:02

        • Partager sur Facebook
        • Partager sur Twitter
        Un accès premium d'un mois avec le code AXEL-8RR3 C'est cadeau et c'est illimité !
          24 janvier 2016 à 23:20:17

          AxelHuberty a écrit:

          ThomasGerard a écrit:

          Voici mon code pour réaliser un code barre mais celui ci ne marche quelqu'un pourrait il m'aider ?

          Je ne sais pas trop, tu veux qu'il court ? ;)

          Plus sérieusement, essaye d'expliquer ce qui ne va pas pour commencer.

          @Nucro, je serais tenté de te donner comme idée :

          • JavaFX n'était pas trop apprécié lors de la création du MOOC. Personnellement, j'utilise encore Swing par manque de temps (apprentissage d'une autre API).
          • Swing se retrouve dans de nombreuses applications, donc c'est plus pratique de connaitre une solution largement utilisé.

          Et je ne dirais pas que java utilise JavaFX par défaut, juste que Swing est désormais déprécié, en dehors des bugs qui seront encore corrigé. Mais dans ce sens, tu peux te demander pourquoi certains utilisent encore AWT pour leurs interfaces (si si, je vous assure que j'ai vu ça il y a peu, heureusement ce collègue fait du web en général ;-) ).

          -
          Edité par AxelHuberty il y a environ 1 heure


          @AxelHuberty Si si, ça l'est depuis Java 8 -> https://fr.wikipedia.org/wiki/JavaFX

          Swing n'est simplement plus développé (sauf pour le debug).

          • Partager sur Facebook
          • Partager sur Twitter
            24 janvier 2016 à 23:41:37

            nucro a écrit:

            @AxelHuberty Si si, ça l'est depuis Java 8 -> https://fr.wikipedia.org/wiki/JavaFX

            Swing n'est simplement plus développé (sauf pour le debug).

            Ce que je veux dire, c'est que cela n'est tant utilisé. Oracle veut, mais les dev que je connaisse sont resté avec Swing vu le peu d'interface créé (avec Java du moins).

            Je sais que JavaFX utilisait d'abord des fichiers en XML (ou XHTML même je pense) mais finalement est repassé a un code similaire a Swing mais avec une gestion différente, donc on se retrouve avec les même problème que Swing mais avec un apprentissage supplémentaire.

            Mais je ne vais pas en dire plus car je suis resté a Swing par facilité. Peut-être que d'autre, qui l'utilise, pourront dire s'il est plus pratique.

            • Partager sur Facebook
            • Partager sur Twitter
            Un accès premium d'un mois avec le code AXEL-8RR3 C'est cadeau et c'est illimité !
              25 janvier 2016 à 19:16:54

              RESOLU - J'ai trouvé la solution !

              Cafouillage ... quelqu'un pourrait-il m'expliquer ce qui ne va pas dans ce bout de code simple concernant les enum.

              Je débute comme vous le comprenez !

              L'exécution de TestGarage0() renvoie toujours RENO....

              Je ne sais plus comment modifier, je crois que j'y perd mon latin, ou alors il y a des concepts de base que je n'ai pas captés ! et ça commence à me Gonfl...

              Merci à ceux qui voudront bien me passer le petit tuyau qui débloquera ma situation.

              package GarageTP1;

              public enum Marque {

              RENO("RENAULT"), PIGEOT("PEUGEOT"), TROEN("CITROEN");

              private String nomMarque;

              Marque(String pnomMarque) {

              this.nomMarque = pnomMarque;

              }

              public String getNomMarque(String pnomMarque) {

              this.nomMarque = pnomMarque;

              return nomMarque;

              }

              public void setNomMarque(String pnomMarque) {

              this.nomMarque = pnomMarque;

              }

              }

              Et ma class Main pour tester :

              package GarageTP1;

              public class TestGarage0 {

              public static void main(String[] args) {

              String pnomMarque = "test";

              Marque m1 = Marque.RENO;

              System.out.println (m1);

              }

              }

              Merci encore pour votre aide.

              -
              Edité par ad41 26 janvier 2016 à 10:28:50

              • Partager sur Facebook
              • Partager sur Twitter
                26 janvier 2016 à 0:14:48

                Bonjour

                Mon soucis est que j'aimerai enregistrer un tableau dans un fichier. Et plus tard pouvoir recuperer ou modifier les informations contenues via des accesseurs et des mutateurs.

                MOoha.

                • Partager sur Facebook
                • Partager sur Twitter
                  26 janvier 2016 à 8:44:51

                  MohammedBathily1 a écrit:

                  Bonjour

                  Mon soucis est que j'aimerai enregistrer un tableau dans un fichier. Et plus tard pouvoir recuperer ou modifier les informations contenues via des accesseurs et des mutateurs.

                  MOoha.


                  Bonjour,

                  je ne comprends pas ta question. Ton tableau c'est un tableau d'entiers, de réels, d'objets?

                  Ton fichier, c'est un fichier texte, un fichier binaire?

                  Stp sois un peu plus explicite. Merci

                  -
                  Edité par FarelWAMBATOUATSA 26 janvier 2016 à 8:45:28

                  • Partager sur Facebook
                  • Partager sur Twitter
                    26 janvier 2016 à 10:58:08

                    Je viens enfin d'être corrigé pour le dernier TP du cours. Après avoir mis en place une gestion de DAO générique (ultra commenté), je reçois ma note

                    Si le dernier, qui vient de me corriger, se reconnait, peut-il expliquer son choix ?

                    Je peux reposter mon code si nécessaire mais je ne comprend pas pourquoi je n'ai pas plus... La structure de ma DAO gère les transactions lors des exceptions. Une classe abstraire s'occupe des transactions, les classes filles s'occupe de redéfinir la création des PreparedStatement. Chaque DAO était donc limité au strict nécessaire pour la lecture (la requete SQL, les paramètres à placer selon le type de requête, et la création de l'instance).

                    Des commentaires sont présents dans tout le code, le code est indenté (merci au cours du JavaEE qui fournissait son formatage ;) )

                    S'il n'a pas compris mon code, j'avais laissé mon pseudo pour me contacter.

                    Je tiens tout de même a préciser que je suis développeur Java, j'ai quelque années d'expériences, donc je pense pouvoir écrire une DAO sans rougir. J'ai écris ce code en pensant au correcteur qui pourrait ne pas comprendre ma logique habituel donc j'ai simplifié la généricité au maximum.

                    -
                    Edité par AxelHuberty 26 janvier 2016 à 10:58:32

                    • Partager sur Facebook
                    • Partager sur Twitter
                    Un accès premium d'un mois avec le code AXEL-8RR3 C'est cadeau et c'est illimité !
                      27 janvier 2016 à 8:49:38

                      Bonjour à tous,

                      Je termine le TP1 Garage mais je rencontre un problème sur la lecture du fichier, je voulais afficher la liste de tous les voitures

                                try{
                                    input = new ObjectInputStream(new BufferedInputStream( new FileInputStream( new File("Garage.txt"))));
                                    
                                    System.out.println("*************************"); 
                                    System.out.println("Affichage des voitures :");
                                    System.out.println("*************************");
                                    
                                  System.out.println(((List<Vehicule>)input.readObject()));
                         
                                }
                                 // si exception 
                      	      catch (FileNotFoundException e) {
                      	        	System.err.println("Probléme d'affichage ! ");
                      	      } catch (IOException e) {
                      	        	System.err.println("Erreur de lecture !");
                      	      }
                                catch (ClassNotFoundException e) {
                      				e.printStackTrace();
                      		  }
                      

                      Or j'ai une erreur

                        
                      Exception in thread "main" java.lang.ClassCastException: com.garage.vehicule.Lagouna cannot be cast to java.util.List
                      	at com.garage.Garage.Lecture(Garage.java:84)
                      	at com.garage.Garage.(Garage.java:37)
                      	at com.garage.Main.main(Main.java:29)
                      
                      

                      Si je mets

                        
                      System.out.println(((Vehicule)input.readObject()));
                      

                      Cela marche mais il affiche seulement une seule voiture

                      Merci

                      -
                      Edité par Forst 27 janvier 2016 à 8:50:38

                      • Partager sur Facebook
                      • Partager sur Twitter
                      Forst
                        27 janvier 2016 à 9:05:23

                        Bonjour,

                        Le meilleur conseil que je peux donner avec ce genre d'exception, c'est de lire et comprendre le message (donc l'anglais ;) )

                        Tu as bien compris qu'il s'agissait d'un problème de cast. En effet il trouve une instance de type Lagouna hors tu veux une List.

                        Je n'ai pas lu le code mais je pense pouvoir dire facilement que tu as enregistrés les véhicules dans ton fichier avec une boucle, un véhicule à la fois. Hors, il est précisé dans le cours, mais j'ai fait la même erreur la première fois, qu'on ne peut enregistrer qu'un objet par fichier (donc ils sont écrasé à chaque fois).

                        Ici, il ne faut pas enregistrer les véhicules mais le Garage au complet, la liste étant sérializable, tu pourras récupérer ton Garage au complet depuis le fichier.

                        • Partager sur Facebook
                        • Partager sur Twitter
                        Un accès premium d'un mois avec le code AXEL-8RR3 C'est cadeau et c'est illimité !
                          27 janvier 2016 à 9:36:36

                          Bonjour, je planche sur le TP Garage, et je tourne pas mal en rond.

                          Quelqu'un peut-il m'aider à passer un cap.

                          Beaucoup de choses ne sont pas claires, limpides et je m'embrouille beaucoup entre les interfaces, classes abstraites et enum..

                          Pour les options je pense avoir un code qui "marche" à peu près (??).

                          Par contre je tourne en rond pour la la définition du moteur telle qu'elle doit marcher avec le programme de test comme par exemple : d4_1.setMoteur(new MoteurDiesel("200 Hdi", 25684.80d));

                          Voici mon code pour les classes :

                          Moteur

                          package GarageTP1;
                          
                          public abstract class Moteur {
                          	public String TypeMoteur;
                          	public String cylindre;
                          	public Double prix;
                          
                          	// constructeurs
                          	public Moteur() {
                          	}
                          	public Moteur(String cylindre, Double prix) {
                          		super();
                          		this.cylindre = cylindre;
                          		this.prix = prix;
                          	}
                          	public String getCylindre() {
                          		return cylindre;
                          	}
                          	public void setCylindre(String cylindre) {
                          		this.cylindre = cylindre;
                          	}
                          	public Double getPrix() {
                          		return prix;
                          	}
                          	public void setPrix(Double prix) {
                          		this.prix = prix;
                          	}
                          }

                          TypeMoteur

                          package GarageTP1;
                          
                          public enum TypeMoteur {
                          	// Construction de l'énum TypeMoteur
                          	DIESEL("Moteur diesel Common Rail DI."), ESSENCE("Moteur essence THP."), HYBRIDE(
                          			"Moteur hybride Essence/électrique."), ELECTRIQUE("Moteur électrique.");
                          
                          	private String typeMoteur;
                          
                          	TypeMoteur(String typeMoteur) {
                          		this.typeMoteur = typeMoteur;
                          	}
                          	public String getTypeMoteur() {
                          		return typeMoteur;
                          	}
                          }

                          MoteurDiesel

                          package GarageTP1;
                          
                          public class MoteurDiesel extends Moteur {
                          	//constructeurs modifiés MoteurDiesel
                          	public MoteurDiesel () {		
                          	}
                          	public MoteurDiesel (String cylindre, Double prix) {
                          		super();
                          		this.cylindre = cylindre;
                          		this.prix = prix;
                          	}
                          	//MoteurDiesel("200 Hdi", 25684.80d));
                          }

                          Vehicule

                          package GarageTP1;
                          
                          import java.util.ArrayList;
                          import java.util.Iterator;
                          import java.util.LinkedList;
                          import java.util.List;
                          
                          public class Vehicule {
                          	public Double prix;
                          	public static String nom;
                          	public static List<Object> options = new ArrayList<Object>();
                          	public static String nomMarque;
                          
                          	// 1. créer fonction addOption(opt : Option) : void
                          	// 2. créer fonction toString() String
                          	// 3. créer fonction getMarque() : Marque
                          	// 4. créer fonction getOptions() : list<Options>
                          	// 5. créer fonction getPrix() : Double
                          
                          	// Constructeurs
                          	public Vehicule() {
                          		// TODO Auto-generated constructor stub
                          	}
                          	public Vehicule(String nom, Double prix) {
                          		super();
                          		this.prix = prix;
                          		this.nom = nom;
                          	}
                          	public Double getPrix() {
                          		return prix;
                          	}
                          	// getnomMarque
                          	public static void getMarque() {
                          		Marque m1 = Marque.RENO;
                          		System.out.println(m1.getNomMarque());
                          	}
                          	// addOptions
                          	public void addOption() {
                          	}
                          	// addOptions liste
                          	public void addOption(GPS gps) {
                          		options.add("GPS");
                          	}
                          	public void addOption(VitreElectique ve) {
                          		options.add("Vitres Electriques");
                          	}
                          	public void addOption(SiegeChauffant sc) {
                          		options.add("Sièges chauffants");
                          	}
                          	public void addOption(BarreDeToit bt) {
                          		options.add("Barres de toit");
                          	}
                          	public void addOption(Climatisation clim) {
                          		options.add("Climatisation auto");
                          	}
                          	// getoptions liste
                          	public static void getOptions() {
                          		for (Object opt : options) {
                          			System.out.print("Ce véhicule est doté de l'option : " + opt + "\n");
                          		}
                          	}
                          	public void setMoteur() {
                          		new MoteurDiesel("200 Hdi", 25684.80d);
                          		System.out.print("Dans setmoteurDiesel de Vehicule\n");
                          	}
                          }

                          TestGarage0

                          package GarageTP1;
                          
                          public class TestGarage0 {
                          
                          	public static void main(String[] args) {
                          		Marque m1 = Marque.RENO;
                          		System.out.println(m1.getNomMarque());
                          		
                          		Vehicule lag1 = new Lagouna();
                          		lag1.addOption(new GPS());
                          		lag1.addOption(new SiegeChauffant());
                          		lag1.addOption(new VitreElectique());
                          		lag1.addOption(new BarreDeToit());
                          		lag1.addOption(new Climatisation());
                          		
                          		lag1.setMoteur(new MoteurDiesel("200 Hdi", 25684.80d));
                          		
                          		Vehicule.getOptions ();		
                          	}
                          }

                          Erreur : The method setMoteur() in the type Vehicule is not applicable for the arguments (MoteurDiesel) sur lag1.setmoteur (new ... dans la classe TestGarage0 ci dessus..

                          Je ne sais pas comment modifier car je ne sais pas quel raisonnement adopter pour mettre en place le code adéquate !

                          Merci pour votre aide et si possible quelques explications qui me permettront de comprendre la gymnastique.









                          -
                          Edité par ad41 27 janvier 2016 à 14:06:50

                          • Partager sur Facebook
                          • Partager sur Twitter
                            27 janvier 2016 à 22:06:40

                            Si tu as suivi le diagramme fourni, ta classe Lagouna hérité bien de Vehicule. Tu peux voir dans Véhicule que la méthode setMoteur n'attends aucun paramètre, alors que dans la classe fourni (Garage), la méthode doit pouvoir recevoir le moteur (étant donnée que la méthode n'est rien d'autre qu'un setter.

                            Je te conseille de simplement modifier la méthode dans Vehicule en

                            public void setMoteur(Moteur moteur){
                                this.moteur = moteur;
                            }
                            public void adOption(Option option){ //Une méthode pour toutes les options }

                            C'est le corps d'un setter standard. Bien sur il faut ajouter ton attribut moteur dans vehicule, je ne pense pas l'avoir vu dans ta classe actuel.

                            Je vois quelques particularité dans ta classe Vehicule, ta liste attends des objets, alors que tu veux n'y stocker que des Options et surtout, ta classe n'a pas de variable d'instance, ce sont tous des attribut static.

                            Avec ces quelques indications, tu devrais pouvoir reprendre l

                            • Partager sur Facebook
                            • Partager sur Twitter
                            Un accès premium d'un mois avec le code AXEL-8RR3 C'est cadeau et c'est illimité !
                              28 janvier 2016 à 1:14:27

                              Merci

                              AxelHuberty a écrit:

                              Bonjour,

                              Le meilleur conseil que je peux donner avec ce genre d'exception, c'est de lire et comprendre le message (donc l'anglais ;) )

                              Tu as bien compris qu'il s'agissait d'un problème de cast. En effet il trouve une instance de type Lagouna hors tu veux une List.

                              Je n'ai pas lu le code mais je pense pouvoir dire facilement que tu as enregistrés les véhicules dans ton fichier avec une boucle, un véhicule à la fois. Hors, il est précisé dans le cours, mais j'ai fait la même erreur la première fois, qu'on ne peut enregistrer qu'un objet par fichier (donc ils sont écrasé à chaque fois).

                              Ici, il ne faut pas enregistrer les véhicules mais le Garage au complet, la liste étant sérializable, tu pourras récupérer ton Garage au complet depuis le fichier.



                              -
                              Edité par Forst 28 janvier 2016 à 1:55:45

                              • Partager sur Facebook
                              • Partager sur Twitter
                              Forst
                                29 janvier 2016 à 1:44:45

                                Bonjour à tous,

                                L'un d'entre vous pourrait-il m'expliquer comment coder un petit programme qui irait se connecter à un compte gmail avec le login et le password demandé dans une boite de dialogue interne au petit programme ?

                                En d'autre terme, un programme qui va tapper mon login et mdp tout seul et valide la saisie...

                                Merci pour votre aide :)

                                B.

                                • Partager sur Facebook
                                • Partager sur Twitter
                                  30 janvier 2016 à 18:47:25

                                  Bonjour,

                                  J'ai un petit problème lors de la création de mon constructeur de ma classe Utilisateur qui est "le fils" de la classe Personne:

                                  Utilisateur(in login: string, in password : string, in personne : Personne)

                                  Pouvez-vous m'aider s'il-vous-plaît ? 

                                  Voici le schéma ainsi que mon mon erreur :

                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    30 janvier 2016 à 19:39:53

                                    florianhuberty a écrit:

                                    Bonjour,

                                    J'ai un petit problème lors de la création de mon constructeur de ma classe Utilisateur qui est "le fils" de la classe Personne:

                                    Utilisateur(in login: string, in password : string, in personne : Personne)

                                    Pouvez-vous m'aider s'il-vous-plaît ? 

                                    Voici le schéma ainsi que mon mon erreur :

                                    Bonsoir,

                                    Il faut savoir qu'en Java, quand tu crées une classe, son constructeur par défaut est créé automatiquement mais ça le reste si et seulement si tu ne crées pas de constructeur spécialisé pour cette classe. Or d'après ton diagramme des classes, tu as créé deux constructeurs spécialisés pour la super classe Personne de ce fait, elle ne dispose plus du constructeur par défaut créé implicitement. Pour pouvoir utiliser celui-ci (le constructeur par défaut), tu devras le créer de façon explicite dans la super classe Personne.

                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      1 février 2016 à 14:22:39

                                      Bonjour j'aurais une question, voila mon prof nous a donné un projet d'exemple  et il arrive a instancier une classe directement dans le cardlayout; cf : photo : http://www.upimg.fr/ih/ahfm.png

                                      Moi j'ai essayé de faire pareil mais impossible, j'ai du passer par un cardlayout avec plusieurs JPanel

                                      http://www.upimg.fr/ih/6rii.png

                                      Si quelqu'un aurait une idée du comment ce serait super :)

                                      PS : Ce n'est pas du code "fait main" mais plutot avec la fonction wysiwyg de swing :)

                                      -
                                      Edité par hugoduret 1 février 2016 à 14:23:04

                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        1 février 2016 à 16:34:40

                                        Bonjour,

                                        Il faut déjà faire attention, on ajoute les panels dans un panel ayant comme layout un CardLayout. Un layout ne contient pas de panel directement (ou même indirectement).

                                        Je dirais que ton prof a créé une classe héritant de JPanel pour définir son objets et les composants contenu dedans, ainsi il ajoute à son "cardpanel" les instances de ses objets.

                                        C'est le plus propre, je fais souvent ainsi, cela permet de réutiliser le même objet dans un autre écran, une dialog, ... si besoin.

                                        J'espère t'avoir aidé.

                                        Axel

                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                        Un accès premium d'un mois avec le code AXEL-8RR3 C'est cadeau et c'est illimité !
                                          5 février 2016 à 7:10:00

                                          bjr

                                          je suis dans le chapitre "Notre première fenetre..."

                                          tout va très bien pour la créer , mais a partir de la section : jcpanel en couleur

                                          aucuns changements , la fenetre reste grise ....

                                          j'ai bien créé les classes : main,Test, Fenetre , panneau.....

                                          que se passe t-il ?

                                          merci

                                           "résolu"....

                                          J'ai trouvé tout seul ;-)

                                          public static void main(String[] args){....}


                                          était positionné dans la class Test , au lieu de main ....

                                          donc forcement c'est la class Test (en gris) qui prenait le dessus sur Fenetre (en couleur)

                                          dur dur quand on débute lol......

                                          -
                                          Edité par PatrikRaynal 6 février 2016 à 6:02:07

                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            8 février 2016 à 11:10:36

                                            Bonjour, 

                                            Je suis dans le chapitre les flux d'entrée-sortie et il y a une qqchose que je ne comprends pas : une des options de copie d'un fichier ( avec Files.copy() ) est la copie atomique :

                                            StandardCopyOption.ATOMIC_MOVE : copie atomique 

                                            Quelqu'un pourrait me dire de quoi il s'agit ? je n'ai pas trouvé d'explication claire.

                                            Merci d'avance

                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              8 février 2016 à 11:37:33

                                              En fait j'ai une deuxième question sur ce chapitre et la section du Pattern Decorator :

                                              Je ne saisie pas bien ce paragraphe : 

                                              Vous avez pu voir que l'invocation des méthodes se faisait en allant jusqu'au dernier élément pour remonter ensuite la pile d'invocations. Pour inverser ce fonctionnement, il vous suffit d'inverser les appels dans la méthode preparer() : affecter d'abord le nom de la couche et ensuite le nom du décorateur.

                                              S'agit-il de faire ça dans chacune des classes "Couche" ? 

                                              En transformant :

                                              public class CoucheChocolat extends Couche{
                                                public CoucheChocolat(Patisserie p) {
                                                  super(p);
                                                  this.nom = "\t- Une couche de chocolat.\n";
                                                }
                                              }

                                              en

                                              public class CoucheChocolat extends Couche{
                                                public CoucheChocolat(Patisserie p) {
                                                  this.nom = "\t- Une couche de chocolat.\n";
                                                  super(p);
                                                }
                                              }


                                              J'avoue que ce n'est pas très clair pour moi . Merci d'avance de votre aide .



                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                                8 février 2016 à 13:15:48

                                                Bonjour, je débute en Java et j'en suis au Tp1 du cours .. voici mon code :

                                                package tp1;
                                                import java.util.Scanner;
                                                
                                                
                                                public class Conversion {
                                                
                                                	public static void main(String[] args) {
                                                //////////////////////////////////////////////////////////////////////
                                                		int nbr1 = 0, nbr2 = 0;
                                                		char rep1 = ' ', rep2 = '2'; 
                                                		Scanner sc = new Scanner(System.in);
                                                //////////////////////////////////////////////////////////////////////		
                                                while(rep2 == '2' ) {
                                                
                                                	
                                                while(rep1 != '1' && rep1 != '2') {
                                                	 System.out.println("quelle conversion voulez vous faire ?  ");
                                                	 System.out.println("Degrés Celsius -> degrés Fahrenheit Tappez 1");
                                                	 System.out.println("Degrés Fahrenheit -> Degrés Celsius Tappez 2");
                                                	 rep1 = sc.nextLine().charAt(0); 	
                                                	 if (rep1 != '1' && rep1 != '2') rep1 = ' ';	 
                                                	 }
                                                     ////////////////////////////////////////////////////////////////
                                                	 System.out.println("quelle température convertir ?");
                                                	 if (rep1 == '1') {
                                                		 nbr1 = sc.nextInt();
                                                		 nbr2 = 9/5 * nbr1 + 32 ; 
                                                		 System.out.println(nbr1 + " °C équivaut à "+ nbr2 + " °F");	
                                                	 }
                                                	 else 
                                                     if (rep1 == '2') {
                                                    	 nbr1 = sc.nextInt();
                                                	     nbr2 = ((nbr1-32) * 5) / 9 ; 
                                                		 System.out.println(nbr1 + " °F équivaut à "+ nbr2 + " °C");		 
                                                	 }
                                                	 ////////////////////////////////////////////////////////////////
                                                	 rep1 = ' ';
                                                	 rep2 = ' ';
                                                	 ///////////////////////////////////////////////////////////////
                                                	 while (rep2 != '1' && rep2 != '2') {
                                                		 System.out.println("Faire une autre conversion ? ");
                                                		 System.out.println(" 1 = non, 2 = oui ");
                                                		 rep2 = sc.nextLine().charAt(0); 
                                                		 if (rep2 != '1' && rep2 != '2') rep2 = ' ';
                                                		 }
                                                	 
                                                	  }
                                                	  /////////////////////////////////////////////////////////////////	 
                                                 System.out.println("au revoir ");
                                                 sc.close(); 
                                                 }
                                                }
                                                

                                                 voilà mon problème : quand je lance le programme tout ce passe bien jusqu'à la ligne 43 ..une erreur se produit .. voilà ce que la console affiche :

                                                /////////////////////////////////////////////////////////////////////////////////////////////////

                                                quelle conversion voulez vous faire ?  

                                                Degrés Celsius -> degrés Fahrenheit Tappez 1

                                                Degrés Fahrenheit -> Degrés Celsius Tappez 2

                                                1

                                                quelle température convertir ?

                                                11

                                                11 °C équivaut à 43 °F

                                                Faire une autre conversion ? 

                                                 1 = non, 2 = oui 

                                                Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 0

                                                at java.lang.String.charAt(Unknown Source)

                                                at tp1.Conversion.main(Conversion.java:43)

                                                ///////////////////////////////////////////////////////////////////////////////////////////////////////
                                                je ne comprend pas d'ou provient l'erreur étant donné que j'ai tapé exactement le même code pour la variable 'rep1' que ça fonctionne .. quelqun peut m'éclairer svp? 
                                                je sait que mon code n'est pas super et je compte le recommencer à zéro mais je voudrait juste comprendre pourquoi celui ci ne fonctionne pas..
                                                merci :)
                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                  8 février 2016 à 13:26:09

                                                  @jflahelleclearn

                                                  Pour le mouvement atomique, je ne suis pas persuadé mais une instruction atomique est un bloc qui ne peut pas être découpé qui sera exécuté en une fois par un thread. Donc je partirais dans l'idée que cette action ne peut pas être interrompue par un autre thread, mais cela peut être long donc je doute que cela soit si simple, cela demande quelque essai pour m'en assurer.

                                                  Pour le decorator, tu peux essayer ce que tu proposes mais tu violes une règles primordiale de Java (donc cela ne compilera pas). La première instruction d'un constructeur ne peut être qu'un appel aux constructeur de la classe mère ou de la classe même (super ou this). Si cela n'est pas présent, le compilateur va ajouter un appel au constructeur par défaut de la classe mère "super()". Dans ton cas tu essaye d'instancier une variable suivi d'un appel au super constructeur, donc super ne sera pas la première instruction du constructeur.

                                                  Il est dit d'inverser dans la méthode préparer. (affecter d'abord le nom de la couche et ensuite le nom du décorateur.)

                                                  public String preparer() {
                                                      String str = pat.preparer();
                                                      return nom + str; //avant : return str + nom;
                                                  }

                                                  @OlivierZyra

                                                  En voyant l'exception, tu as une exception qui dit que ta chaine fait moins de 1 caractère (index 0 est hors des bornes). Donc je pense que tu n'as rien tapé dans ta console ce qui donne une chaine vide rep2 = "". Tu peux facilement éviter cela en vérifiant la longeur de ta chaine 

                                                  rep2 = sc.nextLine();
                                                  if(rep2.length > 0){ //ou rep2.length == 1
                                                    rep2 = rep2.charAt(0);
                                                    ...
                                                  } //Sinon continuer ta boucle

                                                  EDIT : 

                                                  Autant pour moi, j'oublie souvent ce concept pour le scanner.

                                                  Utiliser nextInt, nextDouble, ... récupère la valeur numérique que tu tapes mais laisse les caractères 10 et 13 (courament vu comme '\n' pour valider le nombre via enter) donc quand tu appelle ensuite nextLine(), le scanner voit ce caractère et le récupère.

                                                  Lorsque tu utilise un nextLine après un nextInt, il faut d'abord vider la ligne, avec nextLine() ^^ donc tu appelles une première fois nextLine() sans récupérer la valeur (avant la boucle dans ton cas)

                                                  -
                                                  Edité par AxelHuberty 8 février 2016 à 13:42:04

                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                  Un accès premium d'un mois avec le code AXEL-8RR3 C'est cadeau et c'est illimité !
                                                    8 février 2016 à 22:05:04

                                                    Bonjour les gens,

                                                    J'ai un gros problèmes  avec l'écriture la lecture de mes voitures pour le tp2 Garage.

                                                    mon constructeur Garage est le suivant

                                                    public Garage(){
                                                    		//on a just une liste de vehicule vide.
                                                    		this.listeVoiture=new ArrayList<Vehicule>();
                                                    		//On Declare nos objets inputStream en dehor de la boucle try
                                                    		ObjectInputStream objInput;
                                                    		try{
                                                    			//On récupere notre precedent garage!
                                                    			objInput=new ObjectInputStream(
                                                    					new BufferedInputStream(
                                                    							new FileInputStream(
                                                    									new File("Garage.txt"))));
                                                    			System.out.println("Ici on devrait lire le fichier");
                                                    			try{
                                                    				Vehicule V=null;
                                                    				do{
                                                    					//V est  la voiture contenu dans notre ficher garage
                                                    					V=(Vehicule)objInput.readObject();
                                                    					// SI V est non null on le rajoute a notre liste de voiture
                                                    					if(V!=null){
                                                    						this.listeVoiture.add(V);
                                                    					}
                                                    				}while(V!=null);	
                                                    			} 
                                                    			catch (ClassNotFoundException e) {
                                                    				
                                                    				e.printStackTrace();
                                                    			}
                                                    			finally{
                                                    				objInput.close();
                                                    			}
                                                    			
                                                    		}
                                                    		catch(FileNotFoundException e){
                                                    			System.out.println("Aucune Voiture sauvegardée!");
                                                    		}
                                                    		catch(IOException e){
                                                    			e.printStackTrace();
                                                    		}		
                                                    	}

                                                    Et la methode pour ajouter des voitre est la suivante 

                                                    public void addVoiture(Vehicule uneVoiture){
                                                    		this.listeVoiture.add(uneVoiture);
                                                    		///maintenant on commence a ecrire la voiture dans un ficher
                                                    		File fichier=new File("Garage.txt"); 
                                                    		//on regarde si le fichier existe. s'il existe pas on le crée.
                                                    		if(!fichier.exists()){
                                                    			try{
                                                    				fichier.createNewFile();
                                                    			}
                                                    			catch(IOException e){
                                                    				e.printStackTrace();
                                                    			}
                                                    			//on declare note objOut en dehor de la boucle try
                                                    			ObjectOutputStream objOut;
                                                    			try{
                                                    				//on suit l'exemple de cour
                                                    				objOut=new ObjectOutputStream(
                                                    						new BufferedOutputStream(
                                                    								new FileOutputStream(fichier,true)));// Ici on met true pour pouvoir ecrire a la fin du fichier.
                                                    				// on ecrit le vehicule dans le fichier.
                                                    				objOut.writeObject(uneVoiture);
                                                    				// on ferme le fichier.
                                                    				objOut.close();
                                                    			}
                                                    			catch(FileNotFoundException e){
                                                    				e.printStackTrace();
                                                    			}
                                                    			catch(IOException e){
                                                    				e.printStackTrace();
                                                    			}
                                                    		}
                                                    			
                                                    	}
                                                    

                                                    j'ai des probleme pour la lecture et l'ecriture de mon fichier... un l'écriture ne se fait pas a la fin comme je le voudrais (sur ce forum j'ai trouvai qu'il fallait mettre un boolean true au FileOutputStream.

                                                    second j'ai les message d'erreurs suivant quand je compile et j'ai du mal a les comprendre... et donc comme les éviter.

                                                    java.io.EOFException

                                                    at java.io.ObjectInputStream$BlockDataInputStream.peekByte(ObjectInputStream.java:2605)

                                                    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1318)

                                                    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:370)

                                                    at Garage.<init>(Garage.java:35)

                                                    at Main.main(Main.java:17)

                                                    ***************************

                                                    *  Garage OpenClassrooms  *

                                                    ***************************

                                                    + Voiture  RENO : Laguna Moteur ESSENCE 150 Chevaux (10256.0 €) [GPS (113.5€), Siege Chauffant (562.9€), Vitre Electrique (212.35€)] pour une valeur total de 11144.75

                                                    Un peu d'aide serait super cool!
                                                    Merci d'avance!



                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                    A
                                                      9 février 2016 à 9:01:23

                                                      Salut,

                                                      Pour te rediriger très facilement, lorsque l'on vu écrire des instances dans un fichier, il est bon de se rappeler que l'on ne peut pas écrire plusieurs instances dans un même fichier, donc si tu boucles pour écrire chaque véhicule, tu vas a chaque fois écraser le précédent (pour ne garder que le dernier). L'astuce est d'enregistrer l'instance de Garage, la liste est serializable donc tu pourras récupérer le garage en lecture de la même façon.

                                                      Pour ton exception (qui n'est pas une erreur de compilation, une EOFException est généré au runtime), je pense que cela vient de ta boucle while qui tente de lire deux fois, vu que tu n'auras qu'un objet dans le fichier, tu tentes de lire après celui ci et donc tu es hors des bornes du fichier (EOF -> End Of File), mais ce n'est qu'une supposition.

                                                      Bon continuation

                                                      Axel

                                                      • Partager sur Facebook
                                                      • Partager sur Twitter
                                                      Un accès premium d'un mois avec le code AXEL-8RR3 C'est cadeau et c'est illimité !
                                                        9 février 2016 à 9:43:38

                                                        OK je vois.  donc ta proposition est d'écrire toute une liste dans un fichier... et pas écrire un vehicule dans un fichier (a la fin de ce dernier) a chaque fois  qu'on en rajoute un. c'est beaucoup plus simple en effet.

                                                        mais par curiosité,  connais tu réf qui explique comment écrire a la fin d'un fichier?

                                                        Après un essais rapide... ma methode addVoiture ne réecrit pas par dessus... Je suis perdu! juste la première voiture est sauvegardée 

                                                        public void addVoiture(Vehicule uneVoiture){
                                                        		//on Rajoute la voiture a la liste
                                                        		this.listeVoiture.add(uneVoiture);
                                                        		///maintenant on commence a ecrire la voiture dans un fichier
                                                        		// on crée un fichier.
                                                        		File fichier=new File("Garage.txt"); 
                                                        		//on regarde si le fichier existe. s'il existe pas on le crée.
                                                        		if(!fichier.exists()){
                                                        			try{
                                                        				fichier.createNewFile();
                                                        			}
                                                        			catch(IOException e){
                                                        				e.printStackTrace();
                                                        			}
                                                        			//on declare note objOut endehor de la boucle try
                                                        			ObjectOutputStream objOut;
                                                        			try{
                                                        				//on suit l'exemple de cour
                                                        				objOut=new ObjectOutputStream(
                                                        						new BufferedOutputStream(
                                                        								new FileOutputStream(fichier)));// Ici on met true pour pouvoir ecrire a la fin du fichier.
                                                        				// on ecrit le vehicule dans le fichier.
                                                        				objOut.writeObject(this.listeVoiture);
                                                        				// on ferme le fichier.
                                                        				objOut.close();
                                                        			}
                                                        			catch(FileNotFoundException e){
                                                        				e.printStackTrace();
                                                        			}
                                                        			catch(IOException e){
                                                        				e.printStackTrace();
                                                        			}
                                                        		}
                                                        			
                                                        	}

                                                        Pourtant ici je rajoute un objet a ma liste et enfin je la réecrit. Pourtant lors de la lecteur seul le premier élément apparait...

                                                         PS JE crois j'ai trouve... après plusieur lecture de mon code... c'est la boucle if qui et mal fermée

                                                        -
                                                        Edité par Varconis 9 février 2016 à 10:14:41

                                                        • Partager sur Facebook
                                                        • Partager sur Twitter
                                                        A
                                                          9 février 2016 à 10:50:19

                                                          Oublie ce que je raconte, je dis une connerie pour l'écriture ... je ne sais plus avec quel classe je confond mais l'écriture d'instances est possible.
                                                          EDIT : La doc d'oracle précise que l'on peut. Par contre, le append semble galérer un peu ... le header du fichier semble corrompu lors d'une modification ce qui rend la lecture compliquée.

                                                          -
                                                          Edité par AxelHuberty 9 février 2016 à 11:01:21

                                                          • Partager sur Facebook
                                                          • Partager sur Twitter
                                                          Un accès premium d'un mois avec le code AXEL-8RR3 C'est cadeau et c'est illimité !
                                                            10 février 2016 à 16:14:05

                                                            Salut tout le monde !!

                                                            Est-ce que quelqu'un pourrait m'aider à comprendre l'erreur de mon code parce que je débute en java et à vrai dire j'y comprends pas grand chose :

                                                            class Covoiturage{
                                                            	Personne [] pers;
                                                            	Voiture [] auto;
                                                            	Covoiturage (Voiture[]listeauto, Personne[]listepers){
                                                            		pers=new Personne[listepers.length];
                                                            		auto=new Voiture[listeauto.length];
                                                            		for (int i=0; i<listepers.length;i++){
                                                            			pers[i]=listepers[i];
                                                            		}
                                                            		for (int i=0; i<listeauto.length; i++){
                                                            			auto[i]=listeauto[i];
                                                            		}
                                                            	}
                                                            	
                                                            	//villeDesservie prend en entrée une chaîne de caractère et renvoie vrai si une des voitures appartient à cette ville
                                                            	boolean villeDesservie (String ville){
                                                            		for (Voiture elem : auto){
                                                            			if (elem.ville.equals(ville)){
                                                            				return true;
                                                            			}
                                                            		}
                                                            		return false;
                                                            	}
                                                            	
                                                            	//nbPersonnes prend en argument une ville et renvoie le nombre de personnes habitant la ville
                                                            	int nbPersonnes (String ville){
                                                            		int cpt=0;
                                                            		for (Personne elem : pers){
                                                            			if (elem.ville.equals(ville)){
                                                            				++cpt;
                                                            			}
                                                            		}
                                                            		return cpt;
                                                            	}
                                                            	
                                                            	//capaciteSuffisante prend en argument une ville et renvoie vrai si il y a assez de place dans les voitures de la ville 
                                                            	//pour toutes les personnes y habitant et faux sinon
                                                            	boolean capaciteSuffisante(String ville){
                                                            		int cptPlace=0;
                                                            		for(Voiture elem : auto){
                                                            			cptPlace+=elem.capa;
                                                                            int nbHabitants = nbPersonnes(String ville);
                                                            		
                                                            		    if (cptPlace <= nbHabitants){
                                                            				return true;
                                                            			} 
                                                            		}
                                                            		return false;
                                                            	}
                                                            }
                                                            	

                                                            Merci d'avance de l'aide que vous pourrez m'apporter ;)

                                                            • Partager sur Facebook
                                                            • Partager sur Twitter

                                                            MOOC Apprenez à programmer en Java

                                                            × 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