0

このコード スニペットがあり、読みやすくする方法が存在するかどうかを知りたいですか?

私のコード:

     public String getMonthName()
{
    if (1 == this.monthNumber) {
        monthName = "January";
    } else if (2 == this.monthNumber) {
        monthName = "February";
    } else if (3 == this.monthNumber) {
        monthName = "March";
    } else if (4 == this.monthNumber) {
        monthName = "April";
    } else if (5 == this.monthNumber) {
        monthName = "May";
    } else if (6 == this.monthNumber) {
        monthName = "June";
    } else if (7 == this.monthNumber) {
        monthName = "July";
    } else if (8 == this.monthNumber) {
        monthName = "August";
    } else if (9 == this.monthNumber) {
        monthName = "September";
    } else if (10 == this.monthNumber) {
        monthName = "Oktober";
    } else if (11 == this.monthNumber) {
        monthName = "November";
    } else if (12 == this.monthNumber) {
        monthName = "December";
    }

    return monthName;
}

/**
 * Gets the number of days in this month
 * @return the number of days in this month in a non-leap year
 */
public int getNumberOfDays()
{
    int numberOfDays;
    if (monthNumber == 1 || monthNumber == 3 || monthNumber == 5 || monthNumber == 7 || monthNumber == 9 || monthNumber == 11) {
        numberOfDays = 31;
    } else if (monthNumber == 4 || monthNumber == 6 || monthNumber == 8 || monthNumber == 10 || monthNumber == 12) {
        numberOfDays = 30;
    } else {
        numberOfDays = 28;
    }

    return numberOfDays;
}
}

コードをリファクタリングするより良い方法は? もっと読みやすくしてください。

4

9 に答える 9

1

これがまさにあなたが求めていたものかどうかはわかりませんが、それは始まりです! 他の方法を希望する場合はコメントしてください。

public string getMonthName(int nbr){
    String[] months = {"January", "February", "Mars", "April", "May", "June", "July", "August", "September", "Oktober", "November", "December"}:    
    return months[nbr-1];
}

public int nbrOfDays(int nbr){
    int[] nbrOfDays= {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    return nbrOfDays[nbr-1];
}

編集:「インデックス 0 の問題」を修正しました。

于 2013-06-28T14:36:04.350 に答える
1

クラスを使用する必要がありますCalendar。これは、この余分な分岐からすべてを救うために提供されています。また、うるう年かどうかを判断する必要はありません。API が判断します。

final String[] months = new String[]{ "January", "February", ... };

public String getMonthName() {
    return months[Calendar.getInstance().get(Calendar.MONTH)];
}

public int getNumberOfDays() {
    return Calendar.getInstance().getActualMaximum(Calendar.DAY_OF_MONTH);
}
于 2013-06-28T14:43:26.230 に答える
0
String[] months = String[] {"Jan", "Feb", ... , "Dec"};

String monthName = months[monthNumber - 1];
于 2013-06-28T14:37:53.833 に答える
0

arrays月と月の日付の数を 2 つ作成します。どちらも12号サイズです。

月の配列では、月の名前をインデックス 0 から 11 までの順に並べ、日数をインデックス 0 から 11 までの順に並べます。これで、インデックスによってデータを取得できます。

于 2013-06-28T15:02:02.507 に答える
0
public String getMonthName(){
     switch (monthNumber) {
         case 1:  return "January";
         case 2:  return "February";
         case 3:  return "March";
         case 4:  return "April";
         case 5:  return "May";
         case 6:  return "June";
         case 7:  return "July";
         case 8:  return "August";
         case 9:  return "September";
         case 10: return "October";
         case 11: return "November";
         case 12: return "December";
         default: return "Invalid month";
      }
}
于 2013-06-28T15:41:03.910 に答える