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

Langage Java Discussion :

Iterateur sur enum


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif Avatar de bj303931
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2016
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2016
    Messages : 75
    Par défaut Iterateur sur enum
    Bonjour,
    j'essaye d'itérer sur un énum qui représente un code-barre avec Epaisseur et Nature à l'intérieur.

    Je suis bloquée à 2 endroits dans le méthode next.

    Mes getters ne sont pas reconnus.

    Mes enums ne passent pas dans la méthode next()...
    (erreur: undefined type)

    La méthode next:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    	public Code39.Epaisseur next(){
    		Code39.Epaisseur next=pile.pop();
    		descendre(E);
    		return next.getE(); 
    	}
    Bien à vous.

  2. #2
    Membre chevronné
    Avatar de Rony Rauzduel
    Homme Profil pro
    En formation Architecte logiciel
    Inscrit en
    Décembre 2008
    Messages
    638
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : En formation Architecte logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2008
    Messages : 638
    Par défaut
    En terme de conception, il serait préférable de créer une classe Enum au lieu de créer une classe basique comme tu l'as fait.
    Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    public enum CodeBarre {
    // ajoute tes enums
    // créer une variable de type entier qui contient la valeur de l'enum
    // créer un contructeur en privé avec comme paramètre la valeur
    // créer une méthode get puis une méthode set qui sont des getter et setter
    // créer ta méthode next() qui elle pourra appeler ton getter
    // ensuite tester ta classe car la classe enum n'est pas instantiable puisqu'abstraite 
    }

  3. #3
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,

    Au lieu de faire des phrases ("tel truc avec tel machin à l'intérieur"), ce serait mieux de nous montrer le code complet, ça nous permettrait de voir vraiment de quoi tu parles.

    Si Code39.Epaisseur est une enum, il n'y a pas de raison qu'elle ait une méthode getE(), sauf si tu en as écrite une, et donc il faudrait qu'on la voit pour se faire une idée de ce qu'elle fait, ce qu'elle prend en paramètre et ce qu'elle retourne... pareil pour tout le reste (et c'est quoi E ?).
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  4. #4
    Membre actif Avatar de bj303931
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2016
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2016
    Messages : 75
    Par défaut
    Oui, tu as raison. Il y a 2 fichiers classes: l'itérateur et la classe d'action

    La classe de l'itérateur
    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
     
    import java.util.Deque;
    import java.util.LinkedList;
     
    public class IterateurSymbole {
     
    	private final Deque <Code39.Epaisseur> pile; 
     
    	public IterateurSymbole (Code39.Epaisseur E, Code39.Nature N){
     
    		pile=new LinkedList<>();
    		descendre(E);
     
    	}
     
    	private void descendre(Code39.Epaisseur E){
    		Code39.Epaisseur Ecourant = E;
     
    		while(Code39.Epaisseur.getE() != null){
    			pile.push(Ecourant);
    		}
     
    	}
     
    	public boolean hasNext(){
    		return !pile.isEmpty();
    	}
     
    	public Code39.Epaisseur next(){
    		Code39.Epaisseur next=pile.pop();
    		descendre(E);
    		return next.getE();
    	}
     
    }
    L'autre classe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    import java.awt.Graphics;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
     
    public class Code39 {
     
    	public static void main(String[] args){
    		System.out.println("It's run!");
    		CodeBarre("0110", g);
     
    	}
     
    	enum Epaisseur {LARGE, ETROIT};
    	Epaisseur epaisseur;
    	enum Nature {BARRE, ESPACE};
    	Nature nature;
     
    	public Code39(){this(Epaisseur.ETROIT,Nature.ESPACE);}
    	public Code39(Epaisseur E, Nature N){
    		this.setE(E);
    		this.setN(N);		
    										}
     
    	public void setE(Epaisseur epaisseur){
    		this.epaisseur=epaisseur;
    	}
     
    	public void setN(Nature nature){
    		this.nature=nature;		
    	}
     
    	public Epaisseur getE(){return this.epaisseur;}
    	public Nature getN(){return this.nature;}
     
    //Dessiner le code barre : 0 une barre étroite; 1 un espace large
    	public void CodeBarre(String CB, Graphics g){
    		int i=0;
    		int n=CB.length();
    		Epaisseur E=Epaisseur.ETROIT;
    		Nature N=Nature.ESPACE;
    		for(i=0; i<n; i++){
    			if (CB.charAt(i)==0){
    				E=Epaisseur.ETROIT;
    				N=Nature.BARRE;
    			}
    			else{
    				E=Epaisseur.LARGE;
    				N=Nature.ESPACE;
    			}
    		}
    		draw(E,N,g);
    	}
     
    	public void draw(Epaisseur E, Nature N, Graphics g){
    		int espace=0;
    		if (E==Epaisseur.ETROIT && N==Nature.BARRE){
    			//Dessiner une barre étroite
    			g.drawLine(10+espace,10+espace,100,100);
    		}
    		else if(E==Epaisseur.LARGE && N==Nature.BARRE){
    			//Dessiner une barre large
    			g.drawLine(25+espace,25+espace,100,100);
    		}
    		else if(E==Epaisseur.ETROIT && N==Nature.ESPACE){
    			//Un espace petit
    			espace=espace+10;		
    		}
    		else if(E==Epaisseur.LARGE && N==Nature.BARRE){
    			//Dessiner un grand espace
    			espace=espace+24;
    		}
    	}
     
    	public String toString(){
     
    		StringBuilder builder=new StringBuilder();
    		toString(builder, this);
    		return builder.toString(); }
     
    	private static void toString(StringBuilder builder, Code39 v){
     
    		builder.append('(');
    		builder.append(v);
    		builder.append(' ');
     
    		builder.append(' ');
    		builder.append(')');
    	}
     
     
     
    }
    Sinon transact, je vais suivre ton conseil et faire une classe énum, merci.

  5. #5
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Là, on voit tout de suite que getE (getE et getN, que tu aurais pu appeler getEpaisseur et getNature quand même !) est une méthode de la classe Code39, pas de la classe Epaisseur, donc il n'y a aucune raison de pouvoir appeler getE sur une instance de Epaisseur (enum ou pas enum).

    C'est quoi exactement que tu cherches à faire ? Itérer à priori, mais itérer sur quoi ?


    Citation Envoyé par bj303931 Voir le message
    Sinon transact, je vais suivre ton conseil et faire une classe énum, merci.
    Oui, m'enfin, tu en as déjà deux des enum, pourquoi y aurait-il besoin d'en faire d'autres ?
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  6. #6
    Membre chevronné
    Avatar de Rony Rauzduel
    Homme Profil pro
    En formation Architecte logiciel
    Inscrit en
    Décembre 2008
    Messages
    638
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : En formation Architecte logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2008
    Messages : 638
    Par défaut
    Oui, m'enfin, tu en as déjà deux des enum, pourquoi y aurait-il besoin d'en faire d'autres ?
    En terme de bonnes pratiques à acquérir dès les débuts en programmation. Il est préférable de dissocier les entités en respectant le SRP(Single Responsability Principle) ... même pour un exercice.
    ici il s'agit de créer uniquement une enum pour Epaisseur et une enum pour Nature tout simplement.

Discussions similaires

  1. erreur sur enum à la creation de la table
    Par mnem0 dans le forum Requêtes
    Réponses: 4
    Dernier message: 08/12/2006, 01h23
  2. Liste d'iterateur sur des listes.
    Par jobherzt dans le forum C++
    Réponses: 5
    Dernier message: 24/11/2006, 14h06
  3. Réponses: 3
    Dernier message: 06/09/2006, 18h59
  4. Iterateur sur pointeur de vector
    Par Pragmateek dans le forum SL & STL
    Réponses: 9
    Dernier message: 13/05/2006, 13h50
  5. question sur enum
    Par d-a-v-e dans le forum C++
    Réponses: 9
    Dernier message: 10/02/2006, 00h56

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