はじめに
Javaでカレンダーを作成してみました。
今年1年分のカレンダーが出力される仕様になっています。
プログラミング学習を初めて2ヶ月が過ぎ、このままだと心が折れそうなので細々と投稿を始めることにしました。
暖かい目で見てください。
今にも挫折しそうです、お願いします。
目次
1.やりたかったコト
2.カレンダー作成コード
3.出力結果
4.補足
やりたかったコト
・1年分のカレンダーの作成
・うるう年を見分けて2月の日数を調整
・文字フォーマットを3文字で統一(見やすくするため)
・toStringメソッドのオーバーライド
カレンダー作成コード
importjava.time.LocalDate;importjava.time.Month;importjava.time.Year;publicclassCalendar_test{/*************************
* フィールド
*************************///カレンダーマトリックス用の配列publicint[][]calendarMatrix;//カレンダー月の年月privateYearyear;//月初用LocalDateLocalDateld;/***********************
* コンストラクタ
***********************///今年をセットpublicCalendar_test(){this.setYear();}/***********************
* メソッド
***********************///year setterprivatevoidsetYear(){this.year=Year.now();}//今年のyearを返すprivateYeargetYear(){returnthis.year;}//指定月の月初setterprivatevoidsetLd(intmonth){this.ld=LocalDate.of(this.getYear().getValue(),month,1);}//指定月の月初getterprivateLocalDategetLd(){returnthis.ld;}//指定月の長さを取り出すprivateintgetMonthLength(){MonththisMonth=Month.from(getLd());returnthisMonth.length(this.ld.isLeapYear());}//月初の曜日を取得privateintgetFirstDay(){returngetLd().getDayOfWeek().getValue()-1;//月:0 火:1 水:2 ・・・}//それぞれの月の配列に日数を入れ込むpublicvoidcalcFields(){introw=0;intcolumn=getFirstDay();for(intdate=1;date<=getMonthLength();date++){this.calendarMatrix[row][column]=date;if(column==6){row++;column=0;}else{column++;}}}@OverridepublicStringtoString(){//入れ込み用builderStringBuildersb=newStringBuilder();//3桁表示のためのフォーマット指定finalStringFORMAT="%3d";for(intn=1;n<=12;n++){this.calendarMatrix=newint[6][7];this.setLd(n);calcFields();sb.append(getYear()+"年"+n+"月");sb.append("\r\n");//入れ込むために回す/縦6回for(inti=0;i<calendarMatrix.length;i++){//横7回for(intj=0;j<calendarMatrix[i].length;j++){intdate=calendarMatrix[i][j];//初期値のままのものは空文字埋めif(date==0){sb.append(" ");//数字はフォーマット指定して入れ込み}else{sb.append(String.format(FORMAT,date));}}//一週間で改行sb.append("\r\n");}//一月で改行sb.append("\r\n");}returnsb.toString();}publicstaticvoidmain(String[]args){System.out.println(newCalendar_test());}}
出力結果
2020年1月
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
2020年2月
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29
2020年3月
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
2020年4月
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
2020年5月
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
2020年6月
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
2020年7月
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
2020年8月
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
2020年9月
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
2020年10月
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
2020年11月
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30
2020年12月
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
補足
私はいわゆる情弱の部類に入る人間だと思います。
twitterのアカウントも持っていません。
ただ、プログラミングの勉強を始めてみてコンピューターがいかに凄いものか実感しています。
まだ勉強を初めて2ヶ月ですが、これからもっと知識を深めて、ここで共有していきたいと思っています。
お手柔らかにお願いします。