1

日付を検証する必要があります。たとえば、2013 年 2 月 31 日と入力すると、2 月には 31 日が含まれていないため、エラーが発生するはずですが、それを達成する方法に行き詰まり、switch ステートメントを使用しようとしましたが、まだ無駄です。助けていただければ幸いです。

public class Date
{
private int PDay;
private int PMonth;
private int PYear;

public Date(int day,int month,int year)
{
    setDay(day);
    setMonth(month);
    setYear(year);
}

public Date(int month,int year)
{
    this(1,month,year);
}

public Date(int year)
{
    this(1,1,year);
}

public void setDay(int day)
{
    PDay=day;
}

public int getDay()
{
    return PDay;
}

public void setMonth(int month)
{
    if(month>=1 && month<=12)
        PMonth=month;
    else
        System.out.println("Month Invalid-Must be Between 1 & 12");
}

public int getMonth()
{
    return PMonth;
}

public void setYear(int year)
{
    if(year>=1950 && year<=2049)
        PYear=year;
    else
        System.out.println("Year Invalid-Must be Between 1950 & 2049");
}

public int getYear()
{
    return PYear;
}

public String toString()
{
    return PDay+"/"+PMonth+"/"+PYear;
}
}

PS 宿題ではありません:P/>

テスト プログラムは次のとおりです。

public class DateTest
{
    public static void main(String[] args)
{
    Date newDate = new Date(7,14,2012);
    Date newDate1 = new Date(2152);
    System.out.println(newDate);
    System.out.println(newDate1);
}
}
4

2 に答える 2

1

コンストラクターで、年と月のに日を設定します。

public Date(int day, int month, int year) {
    setYear(year);
    setMonth(month);
    setDay(day);
}

メソッドsetDay()に検証ロジックを追加します。

public void setDay(int day) {
    if (pMonth == 1 && (day < 1 || day > 31)) { 
        // throw exception or handle error
        throw new IllegalArgumentException("invalid number of days");
    } else if (pMonth == 2 && (day < 1 || day > 28)) {
        // same thing
    }

    // ... rest of validations

    PDay = day;

}

さらに厳密にしたい場合は、年を使用して、2 月が 28 日か 29 日かを判別できます。

于 2013-10-02T19:55:23.253 に答える
0

編集: ニーズに合った既存のフレームワークがある限り、独自に日付処理を実装しないでください。

ただし、既存のフレームワークのいくつかの落とし穴に注意してください: (編集の終わり)

java.util.Dateそのようなチェックには使用しないでください。Date のメソッドのほぼすべてにバグがあり、非推奨として宣言されています。これらのセッターとゲッターはjava.util.Calendarクラスに再実装されました。ただし、状況によってはまだバグがあるため、オプションである場合は Java 8 の新しい Date Time API を使用するか、正しい日付処理のために「サードパーティ」の Jodatime ライブラリを使用するのが最善の選択です。

入力に対していくつかのチェックが必要な場合はjava.text.SimpleDateFormat、解析とチェックを処理するそれを使用できます。

于 2013-10-02T20:06:02.830 に答える