静的な無効メインパブリック(文字列[]引数){ するSystem.out.println(「月、日、ユーザ入力を受信する、年の最初の日から計算される」); のSystem.out.println(「\入力T月後、Enterキーを押します、日付を入力してください"); System.out.printlnは(" \「数4年間のn-入力してください); ながら、(真の){ int型X; = 0のint日; = 0のint CAL。 新しい新しいスキャナスキャナ=スキャナ(System.in); int型の年= scanner.nextInt(); boolean型LeapYear = ISLEAPYEAR(年); System.out.printlnは( "月を入力してください:"); int型=月scanner.nextInt() ; //うるう年2月29日日 IF(&& LeapYear月== 2){ System.out.printlnは( "日付を入力してください:"); デイscanner.nextInt =(); 。しばらく(日> 29 ||デイ<1 ){ System.out.printlnは( "ミスをし、日付を再入力してください:「); scanner.nextInt = X(); 日= xと; } } // -平均2月28日日 IF(月LeapYear == 2 &&!){ System.out.printlnは( "日付を入力してください:"); デイscanner.nextInt =(); 一方(> 28日|| <1日){ System.out.printlnは( "入力エラー、再入力日付:"); X = scanner.nextInt(); 日= X; } } (月IF%2! = 0){ するSystem.out.println( "日付を入力してください"); 日scanner.nextInt =(); 一方は、(デイ>日31 || <1){である。 のSystem.out.println(「入力エラー、再入力日付:「); X = scanner.nextInt(); デイ= X; } } IF(= 2月&&!%2 == 0ヶ月){ System.out.printlnはは( "日付を入力してください:"); デーscanner.nextInt =(); 一方(日> 30日|| <1){ leapYearを返します。 } / ** } *根据年、月、日、计算总天数 * @param年 * @param月 * @return * / パブリック静的INT getDays(INT年、INT月、INT日){ int型ARR [] = {31、28、 31、30、31、30、31、30、31、30、31、30}。 ブールleapYear = ISLEAPYEAR(年); {(leapYear)であれば 、[1] = 29 ARR } int型の和= 0。 以下のために(INT i = 0; iは月-1 <; iは++){ 合計+ = ARRの[I]。 } 和=和+日。 合計を返します。 }
コードのロジック:
4で割り切れる400又は100分割で割り切れることができない:(1)入力年、基準うるう年であるか否かを判断します
(2)ケース4に、月チェック
2月29日があるとき。それは、うるう年2月です
B。それはうるう年で2月、2月の場合は28日を持っています
C。うるう年、2で割り切れるが、その後、月は30日を持っています
D。うるう年、2で割ることができない、そして月は31日あり
それは、2月配列の日数の変化、累積日数サイクルがうるう年であれば数(3)の計算日には、日の月平均数の配列を初期化