回答編集履歴
2
脱字修正
test
CHANGED
@@ -66,7 +66,7 @@
|
|
66
66
|
|
67
67
|
```
|
68
68
|
|
69
|
-
while (全行を読み終えるまでループ)
|
69
|
+
while (全行を読み終えるまでループ) {
|
70
70
|
|
71
71
|
1行読む
|
72
72
|
|
1
表現を修正
test
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
|
5
5
|
|
6
6
|
|
7
|
-
丸投げとまでは思いませんが。「**ヒントを...**」ということなので、現状のコードの致命的な問題点、要は永久ループしてしまう原因のみ
|
7
|
+
丸投げとまでは思いませんが。「**ヒントを...**」ということなので、現状のコードの致命的な問題点、要は永久ループしてしまう原因と、考え方のヒントのみ示させていただきます。最初の`while`ループの前に最初の1行を読んでいますが、それ以降、次の行を読む操作は「同じ月の中のループ」の`while`の中でだけ行われています。違う月のデータになったらスキップしてしまうので、永久ループになってしまいます。
|
8
8
|
|
9
9
|
|
10
10
|
|
@@ -62,11 +62,11 @@
|
|
62
62
|
|
63
63
|
|
64
64
|
|
65
|
-
必ず次のデータを読むような操作、つまりここでは`line = reader.readLine();`ですが、特殊な条件でのみそれを実行するようなプログラムにすると場当たり的なフローになり、バグを生みやすいです。そんな場合は1ヶ所でだけ呼ぶようにし、その後の条件でデータを操作していきます。例えば、質問者さんの今のコードを踏襲すると、おおむね以下のような疑似コードで示すフローになると思います。(あえて完成したコードは載せ
|
65
|
+
必ず次のデータを読むような操作、つまりここでは`line = reader.readLine();`ですが、特殊な条件でのみそれを実行するようなプログラムにすると場当たり的なフローになり、バグを生みやすいです。そんな場合は1ヶ所でだけ呼ぶようにし、その後の条件でデータを操作していきます。例えば、質問者さんの今のコードを踏襲すると、おおむね以下のような疑似コードで示すフローになると思います。(あえて完成したコードは載せません)尚、入力のCSVファイルの行データとしては同じ月のデータが連続していることを想定していますが、そうではない場合は月をキーとして扱うなど、別の方法も色々考えられます。
|
66
66
|
|
67
67
|
```
|
68
68
|
|
69
|
-
while (行
|
69
|
+
while (全行を読み終えるまでループ)
|
70
70
|
|
71
71
|
1行読む
|
72
72
|
|
@@ -88,7 +88,7 @@
|
|
88
88
|
|
89
89
|
|
90
90
|
|
91
|
-
出力していない月の合計
|
91
|
+
出力していない月の合計があれば出力
|
92
92
|
|
93
93
|
```
|
94
94
|
|