Problème avec 1 switch [Résolu]

Signaler
Messages postés
127
Date d'inscription
lundi 11 octobre 2004
Statut
Membre
Dernière intervention
18 mai 2016
-
Messages postés
127
Date d'inscription
lundi 11 octobre 2004
Statut
Membre
Dernière intervention
18 mai 2016
-
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

Messages postés
16365
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
16 juin 2021
122
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
Messages postés
127
Date d'inscription
lundi 11 octobre 2004
Statut
Membre
Dernière intervention
18 mai 2016

Merci KX

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

Merci KX de nouveau !

Cela fonctionne parfaitement ainsi !

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