IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

avec Java Discussion :

Types incompatibles + des explications sur variables, types, classes etc


Sujet :

avec Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2019
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2019
    Messages : 37
    Par défaut Types incompatibles + des explications sur variables, types, classes etc
    Bonjour à toutes et à tous,

    j'ai repris en le simplifiant un exercice sur la création d'un garage :
    dans mon cas j'ai :
    - une classe garage qui va faire écrire le modèle d'une voiture, le type de son moteur...
    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
    public class Garage {
     
        String nomModele;
        TypeMoteur typeMoteur;
        String cylindre ;
        double prixMoteur;
     
        Garage() {      
        }
     
            public String toString() {
            String str= "Voiture modèle " + nomModele + " "
                    + typeMoteur + "  " + cylindre 
                    + " prix du moteur : " + prixMoteur + " €";
            return str;
        }
     
    }
    - une classe Vehicule que voici :

    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
    public class Vehicule {
     
        String cylindre;
        double prixMoteur;
        TypeMoteur typeMoteur;
        protected String nomModele;
     
        public Vehicule(){       
        }
     
        public void setMoteur(TypeMoteur type){
            this.typeMoteur = type;
        }
     
        // On retourne le nom du modèle
        public String getNomModele()
        {return nomModele;}
     
        // On récupère la cylindrée :
        public String getCylindre(){
            return cylindre;
        }
     
        // On récupère le prix de moteur
        public double getPrixMoteur(){
            return prixMoteur;
        }
     
        //On récupère le type de moteur
        public TypeMoteur getTypeMoteur(){
            return typeMoteur;
        }
     
    }
    - une classe Lagouna qui hérite de Vehicule pour le nom du modèle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public class Lagouna extends Vehicule{
     
        public Lagouna(){     
        }
     
        public String getLagouna(String nomModele){
            this.nomModele = "Lagouna";
            return this.nomModele;
        }
     
    }
    - Une classe Moteur :

    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
    public class Moteur {
        protected TypeMoteur typeMoteur;
        protected double prixMoteur;
     
     
        public TypeMoteur getTypeMoteur()
        {return typeMoteur;}
     
        public double getPrixMoteur()
        {return prixMoteur;}
     
        public void setTypeMoteur (TypeMoteur type){
            this.typeMoteur = type;
        }
    }
    -Une classe TypeMoteur qui est en fait une enum :

    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
    public enum TypeMoteur {
       ESSENCE ("ESSENCE");
     
       private String typeMoteur = "";
     
       // Constructeur par défaut
       TypeMoteur(String typeMoteur){
     
       }
     
       public void setTypeMoteur(String type){
               this.typeMoteur = type;
       } 
     
       public String toString(){
           return typeMoteur;
       }
    }
    - Une classe MoteurEssence qui hérite de la classe Moteur :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public class MoteurEssence extends Moteur {
     
        String cylindreMoteur;
        double prixMoteur;
     
        public MoteurEssence (String cyl, double prixMot){
            this.setTypeMoteur(typeMoteur.ESSENCE);
            this.cylindreMoteur = cyl;
            this.prixMoteur = prixMot;
        }
     
    }
    - Et enfin la classe de test que voici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public class ZERO_TEST_1 {
     
     
        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));
     
     
        }
    A la compilation j'obtiens ce message qui concerne la dernière ligne de ce code
    " lag1.setMoteur(new MoteurEssence ("150 Chevaux", 10256d));" :

    error : incompatible types: MoteurEssence cannot be converted to TypeMoteur

    Je comprends bien qu'il y a un problème de type la dedans.

    Sachant que je suis un triple zéro j'aimerais comprendre un peu tout dans ce code, à savoir :

    - comment corriger l'erreur à la compilation,

    - quand dans la ligne
    " lag1.setMoteur(new MoteurEssence ("150 Chevaux", 10256d));"
    on instancie un objet MoteurEssence, que se passe-t-il ?

    Je suis paumé sur ces histoires de typeMoteur, Moteur, MoteurEssence, d'objet, y compris sur cette instruction : " this.setTypeMoteur(typeMoteur.ESSENCE);"....

    Enfin, voilà, en gros je n'y comprends pas grand chose, alors si une âme charitable pouvait m'éclaircir sur tout cela je lui en serait infiniment reconnaissant.

    Par avance merci.

  2. #2
    Membre averti
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2019
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2019
    Messages : 37
    Par défaut Types incompatibles + des explications sur variables, types, classes etc
    Bonjour à toutes et à tous,

    j'ai résolu le problème de types incompatible pour typeMoteur. Voici les codes modifiés au niveau des déclarations :

    Classe Garage

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public class Garage {
     
        String nomModele;
        Moteur typeMoteur;
        String cylindre ;
        double prixMoteur;
    Classe Vehicule

    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
    public class Vehicule {
     
        String cylindre;
        double prixMoteur;
        Moteur typeMoteur;
        String nomModele;
     
     
        public void setMoteur(Moteur type){
            this.typeMoteur = type;
        }
     
     
        //On récupère le type de moteur
        public Moteur getTypeMoteur(){
            return typeMoteur;
        }
     
    }
    Classe Moteur

    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
    public class Moteur {
        protected TypeMoteur typeMoteur;
        protected double prixMoteur;
     
     
        public TypeMoteur getTypeMoteur()
        {return typeMoteur;}
     
        public double getPrixMoteur()
        {return prixMoteur;}
     
        public void setTypeMoteur (TypeMoteur type){
            this.typeMoteur = type;
        }
    }
    Classe TypeMoteur

    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
    public enum TypeMoteur {
       ESSENCE ("ESSENCE");
     
       private String typeMoteur = "";
     
       // Constructeur par défaut
       TypeMoteur(String typeMoteur){
     
       }
     
       public void setTypeMoteur(String type){
               this.typeMoteur = type;
      } 
     
       public String toString(){
           return typeMoteur;
       }
    }
    Classe MoteurEssence

    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
    public class MoteurEssence extends Moteur {
     
        String cylindreMoteur;
        double prixMoteur;
     
        public MoteurEssence(){
     
        }
     
        public MoteurEssence (String cyl, double prixMot){
            this.setTypeMoteur(typeMoteur.ESSENCE);
            this.cylindreMoteur = cyl;
            this.prixMoteur = prixMot;
        }
     
    }

  3. #3
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Hello,

    moui, bravo, mais tu sais c'est n'importe quoi tout ce code. Pas très utile de travailler dessus alors qu'il ne fait rien de bon.
    On devrait pas s'intéresser à ce charabia. Tu dis que tu as "repris et simplifié" alors difficile de dire ce qui était déjà là et ce que tu as cassé.

    Mais il ne faut pas faire ça. Ça n'amène à rien, tu vois bien, c'est complètement n'importe quoi ce que tu nous montres.

    Bon bref, en tout cas quand quelqu'un te demande un Moteur, il faut lui donner un Moteur, c'est à dire un objet de classe Moteur ou d'une sous-classe de Moteur. Il ne faut pas lui donner un TypeMoteur, c'est pas un Moteur.
    Mais ça c'est juste le premier problème avec tout le reste, il faut le jeter ce truc. Et faire les choses correctement, une par une.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Membre averti
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2019
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2019
    Messages : 37
    Par défaut Types incompatibles + des explications sur variables, types, classes etc
    Bonjour Thelvin,

    je comprends que vu comme cela, le code est tellement incomplet qu'on se demande bien à quoi il sert. En fait j'ai d'abord voulu résoudre ce problème de typage signalé par le compilateur.

    Voici en fait le vrai énoncé de ce problème posé sur le tutoriel :

    Vous l’aurez compris, vous allez devoir créer un garage, mais
    vous allez devoir aussi le sauvegarder dans un fichier… Le
    but étant qu’à chaque fois que vous ajoutez un nouveau
    véhicule dans votre garage, celui-ci se sauvegarde
    automatiquement dans un fichier. Il faudra aussi
    automatiquement charger le garage lors de son instanciation.

    Voici le diagramme des classes :
    Nom : DIGRAMME_CLASSES_GARAGE.jpg
Affichages : 103
Taille : 118,9 Ko

    Voici la classe de test pour le programme :
    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
    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);// 1..tu créés ta 1ere voiture et tu
                                        // l'ajoutes dans ton garage avec addVoiture.
     
             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);// 4.. tu créés ta 2e voiture et tu
       // }                                 // l'ajoutes dans ton garage
     
             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);                        
        }
    }
    J'ai aussi d'autres problèmes comme une exception NullPointerException à la compilation.

    Enfin, je suis preneur pour tout conseil, toute méthode, toute astuce pour progresser dans mon apprentissage.

    Merci.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Explications sur le code (classe interne & méthode)
    Par vandeyy dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 04/04/2014, 17h07
  2. des explications sur regsvr32 et regasm.exe
    Par fourchette dans le forum Général Dotnet
    Réponses: 1
    Dernier message: 26/03/2010, 17h44
  3. Demande des explication sur la fonction récursive
    Par nypahe dans le forum Débuter avec Java
    Réponses: 1
    Dernier message: 30/04/2009, 21h11
  4. Explication sur variable
    Par donny dans le forum Linux
    Réponses: 4
    Dernier message: 21/06/2006, 09h27
  5. recherches des cours ou des explications sur les algorithmes
    Par Marcus2211 dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 19/05/2002, 22h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo