2016-11-26 16 views
-1

ちょっと私はこのwhileループを持っています。このループは、日付の有効な入力をチェックしています。このループにチェックを追加する必要があります。うるう年の日が28日を超えることはできません。また、うるう年の場合は月が2月の場合は29日を超えることはできません。月= 2を意味します。whileループ内でうるう年のチェックを追加する

どうすればいいですか?私はその閏年が私はこの声明を使用するかどうかを確認することを知っています:if ((year%4 == 0 && year%100 !=0) || (year%400 == 0))

はここに私のループです:

while ((day>31 || day<=0) || (month>12 || month<=0) || (year<=0))   
    {                    
    System.out.println("The original date/month/year is invaild"); 
    System.out.println("Please enter 3 integers to represent a valid date:"); 
    day = scan.nextInt(); 
    month = scan.nextInt(); 
    year = scan.nextInt(); 
    } 

ところで、私は任意のメソッドやクラスを使用傾ける、それが宿題です。

+2

あなたが「どのメソッドやクラスも使用できません」と言うときには、おそらくあなた自身の*メソッドを書くことができますか?それは私がやっていることです。すべてを一つの巨大な状態に置くことはしないで、 'isValidDate(int year、int month、int day)'メソッドを書いてください。 –

+0

カレンダーを使用して、月の実際の最大値を取得します。 https://docs.oracle.com/javase/7/docs/api/java/util/Calendar.html –

+0

@mrmcwolf私は、ここで明確な部分があると思います。彼は自分自身の日付検証を書くことになっています。宿題です。あなたは基本的に彼にその中核*の部分を騙すように言っています。 – GhostCat

答えて

0

あなたが求めているのかどうかは不明ですが、すべてをwhile条件に直接プッシュする必要はありません。ユーザーが最初に意味をなさないdoesntのエラーメッセージで迎えているように、もちろん

boolean isDateValid = false; 
while (! isDateValid) { 
    System.out.println("The original date/month/year is invaild"); 
    System.out.println("Please enter 3 integers to represent a valid date:"); 
    day = scan.nextInt(); 
    month = scan.nextInt(); 
    year = scan.nextInt(); 
    isDateValid = ... that lengthy conditition 
} 

、まさに素敵なこのありえない:あなたのような何かを行うことができます。そこで、我々は物事を好転させることができ、代わりにwhileループ/ DOを使用します。

boolean isDateValid = false; 
do { 
    System.out.println("Please enter 3 integers to represent a valid date:"); 
    day = scan.nextInt(); 
    month = scan.nextInt(); 
    year = scan.nextInt(); 
    isDateValid = ... that lengthy conditition 
    if (!isDateValid) { 
     System.out.println("The original date/month/year is invalid; please try again"); 
    } 
} while (!isDateValid) 

そして、実際のチェックのためには、単にあなたの心で物事を分離するで始まる - のように、チェックする必要がありますどのような側面:

public static boolean isLeapYear(int year) { 

年が実際にうるう年の場合はtrueを返すメソッドです。

異なるの問題を確認するような小さなヘルパーメソッドをたくさん作成することができます。そして最後に、それらの小さな断片を一緒に持ってきて、必要なチェックをすべて行います。

+1

その部分では、おそらく 'while'ループの代わりに' do'/'while'ループにするでしょう。 –

+0

私はそれをチェックアウトします。ありがとう。 – shaike

+0

@JonSkeet私は答えを増強しました。彼が行くのを助けることを望みます。 – GhostCat

関連する問題