質問するログイン新規登録

回答編集履歴

3

インデント修正

2017/07/31 02:01

投稿

momon-ga
momon-ga

スコア4828

answer CHANGED
@@ -27,15 +27,15 @@
27
27
  // ・・・のようなことをループで表示
28
28
  System.out.println(" 日 月 火 水 木 金 土 日 月 火 水 木 金 土 日 月 火 水 木 金 土");
29
29
  for(int j = 0; j < 6; j++) {
30
- for(int x = 0; x < 3; x++) {
30
+ for(int x = 0; x < 3; x++) {
31
- for(int k = 0; k < 7; k++) {
31
+ for(int k = 0; k < 7; k++) {
32
- System.out.print(
32
+ System.out.print(
33
- calArray[i+x][j][k] == null ? " " : calArray[i+x][j][k]
33
+ calArray[i+x][j][k] == null ? " " : calArray[i+x][j][k]
34
- );
34
+ );
35
- }
35
+ }
36
- System.out.print(" ");
36
+ System.out.print(" ");
37
- }
37
+ }
38
- System.out.println();
38
+ System.out.println();
39
39
  }
40
40
  }
41
41
 

2

雑実装を追加

2017/07/31 02:01

投稿

momon-ga
momon-ga

スコア4828

answer CHANGED
@@ -10,6 +10,7 @@
10
10
  public static String[][] createCalendar
11
11
 
12
12
  最初のループは
13
+ String[][][] calArray = new String[12][][];
13
14
  for (int i = month; i < 12; i++) {
14
15
  int firstDate = checkFirstDate(year, month);
15
16
  // 配列を保存するようにする
@@ -24,6 +25,18 @@
24
25
  // calArray[month] calArray[month+1] calArray[month+2] の第一週を表示
25
26
  // calArray[month] calArray[month+1] calArray[month+2] の第二週を表示
26
27
  // ・・・のようなことをループで表示
28
+ System.out.println(" 日 月 火 水 木 金 土 日 月 火 水 木 金 土 日 月 火 水 木 金 土");
29
+ for(int j = 0; j < 6; j++) {
30
+ for(int x = 0; x < 3; x++) {
31
+ for(int k = 0; k < 7; k++) {
32
+ System.out.print(
33
+ calArray[i+x][j][k] == null ? " " : calArray[i+x][j][k]
34
+ );
35
+ }
36
+ System.out.print(" ");
37
+ }
38
+ System.out.println();
39
+ }
27
40
  }
28
41
 
29
42
  ```

1

追記

2017/07/31 01:58

投稿

momon-ga
momon-ga

スコア4828

answer CHANGED
@@ -1,4 +1,30 @@
1
1
  なかなか良い課題ですね。
2
2
 
3
3
  簡単に修正するとしたら、`System.out` してる部分を配列に保存するようにします。
4
- で、1年分のカレンダーができあがったら、まとめて3か月分を表示するようにします。
4
+ で、1年分のカレンダーができあがったら、まとめて3か月分を表示するようにします。
5
+
6
+ データの作成の部分を表示のロジックを分けておくと後々の修正が楽になります。
7
+ ```
8
+ public static void createCalendar
9
+ ↓ 以下のような実装にする
10
+ public static String[][] createCalendar
11
+
12
+ 最初のループは
13
+ for (int i = month; i < 12; i++) {
14
+ int firstDate = checkFirstDate(year, month);
15
+ // 配列を保存するようにする
16
+ calArray[month] = createCalendar(days[month], year, month, firstDate);
17
+ month++;
18
+ }
19
+ }
20
+ // ここのループの処理を変えれば、もとの1ヶ月単位で表示へ戻すのも簡単だし、
21
+ // 配列渡して表示するメソッドを切り出しておくと、実行時の引数で表示を切り替えられます
22
+ month = 0
23
+ for (int i = month; i < 12; i+=3) {
24
+ // calArray[month] calArray[month+1] calArray[month+2] の第一週を表示
25
+ // calArray[month] calArray[month+1] calArray[month+2] の第二週を表示
26
+ // ・・・のようなことをループで表示
27
+ }
28
+
29
+ ```
30
+