Partage
  • Partager sur Facebook
  • Partager sur Twitter

enum to int

Sujet résolu
    27 janvier 2009 à 2:47:06

    Salut,

    En C++, je suis habitué à faire ceci:

    enum {un, deux, trois, ... };
    
    tableau[un] = un;
    


    Mais en java sa ne fonctionne visiblement pas pareil...

    J'ai une fonction qui reçoit un int en paramètre et ce int dépend de la fonction qui l'appel.
    Ex:

    public enum Enumeration{un, deux, trois, ...};
    
    public FonctionX(int x){...}
    
    public void Fonction1(){
           FonctioncX(Enumeration.un);
    }
    
    public void Fonction2(){
           FonctionX(Enumeration.deux);
    }
    


    Le problème c'est qu'un enum n'est pas un int comme en C++ alors il ne demande de convertir le enum en int et je bloque.
    • Partager sur Facebook
    • Partager sur Twitter
      27 janvier 2009 à 4:00:22

      Ce qui doit t'intéresser c'est la méthode ordinal()
      enum  Enumeration { un, deux, trois};
      int i = Enumeration.deux.ordinal() // i==1
      


      Sinon effectivement, en Java le type enumeration est un peu particulier : c'est une classe à part entière.
      Un exemple tiré de chez sun :
      public enum Planet {
          MERCURY (3.303e+23, 2.4397e6),
          VENUS   (4.869e+24, 6.0518e6),
          EARTH   (5.976e+24, 6.37814e6),
          MARS    (6.421e+23, 3.3972e6),
          JUPITER (1.9e+27,   7.1492e7),
          SATURN  (5.688e+26, 6.0268e7),
          URANUS  (8.686e+25, 2.5559e7),
          NEPTUNE (1.024e+26, 2.4746e7),
          PLUTO   (1.27e+22,  1.137e6);
      
          private final double mass;   // in kilograms
          private final double radius; // in meters
          Planet(double mass, double radius) {
              this.mass = mass;
              this.radius = radius;
          }
          public double mass()   { return mass; }
          public double radius() { return radius; }
      
          // universal gravitational constant  (m3 kg-1 s-2)
          public static final double G = 6.67300E-11;
      
          public double surfaceGravity() {
              return G * mass / (radius * radius);
          }
          public double surfaceWeight(double otherMass) {
              return otherMass * surfaceGravity();
          }
      }
      


      Par curiosité, tu pourrais nous décrire un peu plus le contexte ? histoire de voir les choix de conception que tu as fait :)
      • Partager sur Facebook
      • Partager sur Twitter
        27 janvier 2009 à 4:31:35

        Avec ordinal() sa marche :)

        Par contre ton exemple de Sun n'utilise pas l'enum, il est déclarer mais rien de plus...

        Sinon c'est pour remplir un tableau d'évènement sous C++, mais tous expliquer serait trop long...

        EN tous cas merci pour la méthode ordinal()
        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          27 janvier 2009 à 6:50:00

          Ce n'est pas très courtois de demander aux autres de te consacrer leur temps et de refuser de leur rendre la pareille(surtout pour quelqu'un qui prend la la peine de répondre à 4h du matin).

          Sinon intéressant ordinal, ça permettrait d'utiliser < ou > avec les Enum quand c'est pertinent.
          • Partager sur Facebook
          • Partager sur Twitter
            27 janvier 2009 à 14:25:55

            Citation : terminator

            Par contre ton exemple de Sun n'utilise pas l'enum, il est déclarer mais rien de plus...


            public static void main(String[] args) {
                    double earthWeight = Double.parseDouble(args[0]);
                    double mass = earthWeight/EARTH.surfaceGravity();
                    for (Planet p : Planet.values())
                       System.out.printf("Your weight on %s is %f%n",
                                         p, p.surfaceWeight(mass));
                }
            

            La source : http://java.sun.com/j2se/1.5.0/docs/gu [...] ge/enums.html
            Plus d'infos : http://java.sun.com/docs/books/jls/thi [...] sses.html#8.9

            Citation :

            Sinon c'est pour remplir un tableau d'évènement sous C++, mais tous expliquer serait trop long...


            via JNI ? Ok.
            Parce que sinon, en Java, le moyen de faire :
            enum {un, deux, trois, ... };
            
            tableau[un] = un;
            

            serait d'utiliser java.util.EnumMap (voir java.util.EnumSet, je ne suis pas encore super au point sur les collections)
            Exemple : http://www.java2s.com/Code/Java/Langua [...] Antstatus.htm
            Ce n'est pas forcément utile ici mais c'est toujours bon à savoir ;)
            • Partager sur Facebook
            • Partager sur Twitter

            enum to int

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown