Problème avec 1 switch [Résolu]

Messages postés
127
Date d'inscription
lundi 11 octobre 2004
Dernière intervention
18 mai 2016
- - Dernière réponse : PWM63
Messages postés
127
Date d'inscription
lundi 11 octobre 2004
Dernière intervention
18 mai 2016
- 20 déc. 2013 à 11:14
Bonjour,

J'ai 1 problème avec 1 switch.

Pour information, j'ai utilisé pour modèle ce switch qui se trouve également dans mon code et qui fonctionne parfaitement :
// ce switch est OK
switch (portIdentifier.getPortType())
{
      case CommPortIdentifier.PORT_SERIAL:
                this.jComboBox_Port.addItem(portIdentifier.getName());
}


Déclarations :
    private Datas next_data = Datas._01_FrameStart;

    public enum Datas {

        _01_FrameStart, //2 octets : 0x10 0x02
        _02_messageType, //Message type

// j'ai supprimé les lignes de 03 à 23 pour ne pas alourdir ce quote

        _24_debugInfo, // 0 ~ 22 (now it is 22) Variable-length debug information
        _25_FrameEnd, //0x10 0x03
        _26_FrameSum; //Sum of Frame

        public int getValue() {
            return this.ordinal();
        }

        public static Datas forValue(int value) {
            return values()[value];
        }
    }


J'aurais donc aimé faire 1 switch avec next_data, mais comme ca n'a pas fonctionné, j'ai utilisé if ainsi :

    private void capture_data() {
        
// remplacement du switch par if puis else if pour chaque case... 
        if (next_data == Datas._01_FrameStart) {
            _01_FrameStart();

        else if (next_data == Datas._02_messageType) {
            _02_messageType();

// j'ai supprimé les lignes de 03 à 23 pour ne pas alourdir ce quote

        else if (next_data == Datas._24_debugInfo) {
            _24_debugInfo();

        else if (next_data == Datas._25_FrameEnd) {
            _25_FrameEnd();

        else if (next_data == Datas._26_FrameSum) {
            _26_FrameSum();
        }
    }


Mais hélas, si j'essaie ainsi :
// 1 switch serait pourtant mieux
        switch (next_data) {
// mais au 1er case, ca marche pas...
            case Datas._01_FrameStart:
                _01_FrameStart();
        }

j'ai 1 erreur de syntaxe à la ligne :
case Datas._01_FrameStart:

J'ai essayé de tourner le case dans plusieurs sens, avec 1 new ou autre, sans succès...

Donc, est-ce qu'il existe 1 moyen de faire 1 switch dans mon cas ? (ou est-ce que je suis obligé de conserver mes if else if else if etc ?

Merci d'avance pour votre aide,
Afficher la suite 

Votre réponse

3 réponses

Meilleure réponse
Messages postés
15866
Date d'inscription
samedi 31 mai 2008
Statut
Contributeur
Dernière intervention
14 décembre 2018
2
Merci
Essaye comme ceci :

switch (next_data)
{ // dans un case ne pas faire précéder les enum de leur nom de classe
    case _01_FrameStart:
        _01_FrameStart();
}

La confiance n'exclut pas le contrôle

Dire « Merci » 2

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 106 internautes ce mois-ci

Commenter la réponse de KX
Messages postés
127
Date d'inscription
lundi 11 octobre 2004
Dernière intervention
18 mai 2016
0
Merci
Merci KX

Je regarde ça demain matin et je te tiens au courant.
Commenter la réponse de PWM63
Messages postés
127
Date d'inscription
lundi 11 octobre 2004
Dernière intervention
18 mai 2016
0
Merci
Merci KX de nouveau !

Cela fonctionne parfaitement ainsi !

Le code est maintenant 1 peu plus propre de ce côté :)
Commenter la réponse de PWM63

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.