前提・実現したいこと
年月日を入力して年内の経過日数と残り日数を計算しようとしています。
発生している問題・エラーメッセージ
エラーメッセージなどは表示されないのですが、
実行し答えを加算すると、366日になることについて、
これはコードにおいてよくない点があるのか、それとも
この年内の経過日数と残り日数はそのまま足し合わせてはいけない数なのでしょうか。
年内の経過日数と残り日数を求めます、 年:2018 月:4 日:1 年内で91日目です 年内の残りは275日です もう一度しますか(1...はい/0...いいえ):
該当のソースコード
Java
1import java.util.Scanner; 2 3public class Main { 4 //---各月の日数---// 5 static int[][] mdays = { 6 {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}, //平年 7 {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}, //閏年 8 }; 9 10 //---西暦year年は閏年か---// 11 static int isLeap(int year) { 12 return(year %4 == 0 && year % 100 != 0 || year%400 ==0) ? 1: 0; 13 } 14 15 //---西暦y年m月d日の年内の経過日数を求める---// 16 static int dayOfYear(int y, int m, int d) { 17 int days = d; //日数 18 19 for(int i = 1; i<m; i++) { //1月〜(m-1)月の日数を加える 20 days += mdays[isLeap(y)][i-1];//isLeap()は閏年であれば1,平年であれば0 21 } 22 return days; 23 } 24 25 //---西暦y年m月d日の年内の残り日数を求める--- 26 static int leftDayOfYear(int y, int m, int d) { 27 int remdays = mdays[isLeap(y)][m] - d; //今月の残り日数 28 for(int i = 12; i>m; i--) { //12月〜(m+1)月の日数を加える 29 remdays += mdays[isLeap(y)][i-1]; 30 } 31 return remdays; 32 } 33 34 public static void main(String[] args){ 35 Scanner scan = new Scanner(System.in); 36 int retry; //もう一度? 37 38 System.out.println("年内の経過日数と残り日数を求めます、"); 39 40 do { 41 System.out.print("年:"); 42 int year = scan.nextInt(); //年 43 System.out.print("月:"); 44 int month = scan.nextInt(); //月 45 System.out.print("日:"); 46 int day = scan.nextInt(); //日 47 System.out.printf("年内で%d日目です\n", dayOfYear(year,month,day)); 48 System.out.printf("年内の残りは%d日です\n", leftDayOfYear(year,month,day)); 49 System.out.print("もう一度しますか(1...はい/0...いいえ):"); 50 retry = scan.nextInt(); 51 }while(retry == 1); 52 } 53 54} 55
補足情報(FW/ツールのバージョンなど)
Eclipse Java EE IDE for Web Developers.
Version: Oxygen.2 Release (4.7.2)
Build id: 20171218-0600
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。