55 votes

Java obtient la chaîne du mois à partir d'un entier

Existe-t-il un meilleur moyen de compacter cette méthode, c'est-à-dire de réduire la complexité cyclomatique en évitant les cas de commutation?

 String monthString;
        switch (month) {
            case 1:  monthString = "January";       break;
            case 2:  monthString = "February";      break;
            case 3:  monthString = "March";         break;
            case 4:  monthString = "April";         break;
            case 5:  monthString = "May";           break;
            case 6:  monthString = "June";          break;
            case 7:  monthString = "July";          break;
            case 8:  monthString = "August";        break;
            case 9:  monthString = "September";     break;
            case 10: monthString = "October";       break;
            case 11: monthString = "November";      break;
            case 12: monthString = "December";      break;
            default: monthString = "Invalid month"; break;
        }
        System.out.println(monthString);

119voto

Andrew Points 4058

Essayer:

 import java.text.DateFormatSymbols;
monthString = new DateFormatSymbols().getMonths()[month-1];

Alternativement, vous pouvez utiliser SimpleDateFormat :

 import java.text.SimpleDateFormat;
System.out.println(new SimpleDateFormat("MMMM").format(date));

(Vous devrez mettre une date avec votre mois dans un objet Date pour utiliser la deuxième option).

9voto

Harry Joy Points 27760

Prenez un tableau contenant le nom des mois.

 String[] str = {"January",      
   "February",
   "March",        
   "April",        
   "May",          
   "June",         
   "July",         
   "August",       
   "September",    
   "October",      
   "November",     
   "December"};

Ensuite, où vous voulez prendre un mois, utilisez comme suit :

 if(i<str.length)
    monthString = str[i-1];
else
    monthString = "Invalid month";

3voto

cMinor Points 6745

Vous pourriez avoir un tableau de strigs et un accès par index.

   String months[] = {"January", "February", "March", "April",
                     "May", "June", "July", "August", "September",
                     "October", "November", "December"};

2voto

AS4noob Points 83

Cela a déjà été mentionné, mais voici un moyen de placer le code dans une méthode :

     public static String getMonthName(int monthIndex) {
         return new DateFormatSymbols().getMonths()[monthIndex].toString();
    }

ou si vous vouliez créer une meilleure erreur qu'une ArrayIndexOutOfBoundsException :

     public static String getMonthName(int monthIndex) {
        //since this is zero based, 11 = December
        if (monthIndex < 0 || monthIndex > 11 ) {
            throw new IllegalArgumentException(monthIndex + " is not a valid month index.");
        }
        return new DateFormatSymbols().getMonths()[monthIndex].toString();
    }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X