0

配列の要素をスカラー値と比較するにはどうすればよいですか?

エラーのあるコードの部分は次のとおりです。

if(month != numMonth[])
    System.out.printf("\n not a valid month");
if (day != daysInMonth[]  &&  day> daysOfMonth[month])
    System.out.printf("\n not a valid day");
if (year<1880 && year>2280)
    System.out.printf("\n not a valid year");

(day != daysInMonth[] && day> daysOfMonth[month])expr で、クラス ファイルの予想されるエラーが発生します。

4

3 に答える 3

0

もっと簡単な代替案(IMHO)を提案します。

このタスクでは、Calendarクラスを直接使用して、異なる日と年を配列に格納しないようにします。ここでは、うるう年が特定の状況で問題になる可能性があります。

まず、年を検証します。これらは、このチェーンで最も単純な検証であり、数か月のように、入力された連続するパラメーターのいずれにも依存しません。この場合、最後に行うチェックが最初になります。

if (year < 1880 && year > 2280)
    System.out.printf("\n not a valid year");

年を検証した後、月を検証します。これらも単純な数値ですが、どのように管理するかを定義する必要があります。私は範囲を取ります1 -> 12

if(month < 1 || month > 12)
    System.out.printf("\n not a valid month");

最後に、の助けを借りて日付を作成しますCalendar。このようにして、特定の月に対応する正しい日数を取得できます。次に、それに応じて検証します。

Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR, year);
cal.set(Calendar.MONTH, month - 1); //Calendar manages the months 
                                    //from 0 to 11, that's why 
                                    //you need to substract 1
int maxDays = cal.getActualMaximum(Calendar.DAY_OF_MONTH);

maxDays指定された月と年の最大日数が含まれます。これで、その日の入力が次の範囲にあるかどうかを確認するだけで済みます。

if (day < 1 || day > maxDays)
    System.out.printf("\n not a valid day");

このように、毎月の日数を追跡する必要がなく、うるう年も管理できます。

于 2013-03-07T17:24:16.750 に答える
0

使用する

if (month < 0 || month > 11)

また

if (month < 1 || month > 12)

番号付けがゼロから開始するか、1 から開始するかによって異なります。

&c

于 2013-03-07T17:08:32.767 に答える
0

配列全体ではなく、配列の要素をスカラーと比較できます。また、使用している構文は宣言時にのみ有効です。

int numMonth[] = new int[10];
or 
int numMonth[] = {1,2,3};

and so on

単一のスカラーと比較するには、比較する要素を参照する必要があります。

// to compare with the 1st entry
numMonth[0] == month; // with arrays being zero based
// to compare with the 2nd entry
numMonth[1] == month;

and so on
于 2013-03-07T17:09:35.907 に答える