回答編集履歴

2

脱字修正

2020/10/22 06:15

投稿

dodox86
dodox86

スコア9256

test CHANGED
@@ -66,7 +66,7 @@
66
66
 
67
67
  ```
68
68
 
69
- while (全行を読み終えるまでループ)
69
+ while (全行を読み終えるまでループ) {
70
70
 
71
71
  1行読む
72
72
 

1

表現を修正

2020/10/22 06:15

投稿

dodox86
dodox86

スコア9256

test CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
 
6
6
 
7
- 丸投げとまでは思いませんが。「**ヒントを...**」ということなので、現状のコードの致命的な問題点、要は永久ループしてしまう原因のみ指摘させていただきます。最初の`while`ループの前に最初の1行を読んでいますが、それ以降、次の行を読む操作は「同じ月の中のループ」の`while`の中でだけ行われています。違う月のデータになったらスキップしてしまうので、永久ループになってしまいます。
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