Problème avec 1 switch

Résolu
PWM63
Messages postés
127
Date d'inscription
lundi 11 octobre 2004
Statut
Membre
Dernière intervention
18 mai 2016
- 19 déc. 2013 à 17:58
PWM63
Messages postés
127
Date d'inscription
lundi 11 octobre 2004
Statut
Membre
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,

3 réponses

KX
Messages postés
16568
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
5 juillet 2022
124
Modifié par KX le 19/12/2013 à 18:27
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
2
PWM63
Messages postés
127
Date d'inscription
lundi 11 octobre 2004
Statut
Membre
Dernière intervention
18 mai 2016

19 déc. 2013 à 19:40
Merci KX

Je regarde ça demain matin et je te tiens au courant.
0
PWM63
Messages postés
127
Date d'inscription
lundi 11 octobre 2004
Statut
Membre
Dernière intervention
18 mai 2016

20 déc. 2013 à 11:14
Merci KX de nouveau !

Cela fonctionne parfaitement ainsi !

Le code est maintenant 1 peu plus propre de ce côté :)
0