2017-04-01 2 views
0
public class seasons{  

     public enum compare{ 

       summer(0), spring(1), winter(3), fall(4); 

       (assume the constructor is already coded) 
     } 
} 

Comment créer une méthode qui prend en compte 2 saisons comme arguments et compare les valeurs des saisons?Comparer les types énumérés dans Java

+3

double possible de [Java membres de Comparaison ENUM:? == ou égal()] (http: // stackoverflow. com/questions/1750435/comparison-java-enum-members-ou-equals) –

+1

Voulez-vous dire comparer pour l'égalité, ou pour la position relative au sein de l'énumération? –

+0

Veuillez respecter les conventions de dénomination Java. –

Répondre

0

Comparer avec l'opérateur ==

public static void main(String[] args) 
    { 
     compareSeasons(Seasons.Summer, Seasons.Summer); //returns true; 
     compareSeasons(Seasons.Summer, Seasons.Autumn); //returns false 
    } 

private enum Seasons{ Summer, Autumn, Winter, Spring; } 

private static boolean compareSeasons(Seasons seasonOne, Seasons seasonTwo){ 
     return seasonOne == seasonTwo; 
    } 
0

Voir les commentaires dans le code

public enum Seasons{ 

    summer(0), spring(1), winter(3), fall(4); 

    int order; 
    Seasons(int order){ 
     this.order = order; 
    } 

    //a method that fits the signature of Comparator<T> 
    //https://docs.oracle.com/javase/7/docs/api/java/util/Comparator.html 
    public static int compare(Seasons s1, Seasons s2) { 

     //Box int to an Integer object, and delegate comparison to its 
     //comareTo 
     return new Integer(s1.order).compareTo(s2.order); 

     //or as DarkRift 3 proposed 
     //return Integer.compare(s1.order, s2.order); 
    } 

    public static void main(String[] args) { 

     //if you just want to check for equality you can do it simply by 
     //using the == operator 
     System.out.println(summer == summer); //returns true; 
     System.out.println(summer == winter); //returns false 

     //if you want to compare based on the int property, use a comperator 
     System.out.println(compare(summer, summer));//return 0 meaning equal 
     System.out.println(compare(summer, winter));//return -1 meaning smaller 
     System.out.println(compare(winter,summer));//return 1 meaning bigger 
    } 
} 
+0

L'utilisation de la méthode statique Integer.compare (s1.order, s2.order) serait préférable car il n'aura pas à créer un nouvel objet Integer et placer la deuxième valeur d'opérande dans un autre objet Integer. – DarkRift

+0

Merci @DarkRift, j'ai ajouté cette option – c0der