回答編集履歴
4
option関係型再修正
test
CHANGED
@@ -17,7 +17,7 @@
|
|
17
17
|
ファイルに書かれている件数であれば、ファイルを読んで1行(件)ずつ List に入れていればデータの件数はその List のサイズとして取れます。
|
18
18
|
オプションの数は、下コードの Car.Option のようにオプションを管理するクラスを用意することで知ることが出来ます。
|
19
19
|
|
20
|
-
オプションのように有無を判断するだけのものは、 enum と EnumSet が使えます。
|
20
|
+
オプションのように有無を判断するだけのものは、 enum と Set(EnumSet) が使えます。
|
21
21
|
|
22
22
|
検索には、オブジェクト群を巡回するコードに条件判断のオブジェクトを渡す形にすると、似た/同じコードを何度も書かずに済みます。
|
23
23
|
|
@@ -98,10 +98,10 @@
|
|
98
98
|
final int price;
|
99
99
|
final Set<Option> options;
|
100
100
|
|
101
|
-
Car(String name, int price,
|
101
|
+
Car(String name, int price, Set<Option> options) {
|
102
102
|
this.name = name;
|
103
103
|
this.price = price;
|
104
|
-
this.options =
|
104
|
+
this.options = Set.copyOf(options);
|
105
105
|
}
|
106
106
|
|
107
107
|
void print() {
|
@@ -127,7 +127,7 @@
|
|
127
127
|
|
128
128
|
String name = tokens[0];
|
129
129
|
int price = Integer.parseInt(tokens[1]);
|
130
|
-
|
130
|
+
Set<Car.Option> options = EnumSet.noneOf(Car.Option.class);
|
131
131
|
for(int i=0; i<Car.Option.values().length; i++) {
|
132
132
|
if(Integer.parseInt(tokens[2+i]) == 1) options.add(Car.Option.values()[i]);
|
133
133
|
}
|
3
options を unmodifiable 化
test
CHANGED
@@ -96,12 +96,12 @@
|
|
96
96
|
|
97
97
|
final String name;
|
98
98
|
final int price;
|
99
|
-
final
|
99
|
+
final Set<Option> options;
|
100
100
|
|
101
101
|
Car(String name, int price, EnumSet<Option> options) {
|
102
102
|
this.name = name;
|
103
103
|
this.price = price;
|
104
|
-
this.options = EnumSet.copyOf(options);
|
104
|
+
this.options = Collections.unmodifiableSet(EnumSet.copyOf(options));
|
105
105
|
}
|
106
106
|
|
107
107
|
void print() {
|
2
追加
test
CHANGED
@@ -14,6 +14,8 @@
|
|
14
14
|
csv ファイルを縦割りで列毎に別々の変数(List)にするのではなく、行が表すクラスを想定してそのオブジェクトの集まりを扱うようにするのがオブジェクト指向のやり方です。
|
15
15
|
|
16
16
|
27 とか 11 とかの数値をそのままあちこちに散りばめていると、例えば csv のデータが増えた/減った場合に直すのが大変です。
|
17
|
+
ファイルに書かれている件数であれば、ファイルを読んで1行(件)ずつ List に入れていればデータの件数はその List のサイズとして取れます。
|
18
|
+
オプションの数は、下コードの Car.Option のようにオプションを管理するクラスを用意することで知ることが出来ます。
|
17
19
|
|
18
20
|
オプションのように有無を判断するだけのものは、 enum と EnumSet が使えます。
|
19
21
|
|
1
追加
test
CHANGED
@@ -164,3 +164,47 @@
|
|
164
164
|
}
|
165
165
|
}
|
166
166
|
```
|
167
|
+
実行結果
|
168
|
+
```plain
|
169
|
+
/MENU/
|
170
|
+
「0」車一覧「1」検索「2」終了
|
171
|
+
1
|
172
|
+
検索の仕方を選択してください
|
173
|
+
「0」車種名「1」値段「2」オプション
|
174
|
+
0
|
175
|
+
車種名を入力してください
|
176
|
+
クラウン
|
177
|
+
名前: クラウン
|
178
|
+
値段: 4,350,000円
|
179
|
+
オプション: キーレス,スマートキー,パワーウィンドウ,ベンチシート,シートヒーター,シートクーラー,本革シート
|
180
|
+
/MENU/
|
181
|
+
「0」車一覧「1」検索「2」終了
|
182
|
+
1
|
183
|
+
検索の仕方を選択してください
|
184
|
+
「0」車種名「1」値段「2」オプション
|
185
|
+
1
|
186
|
+
上限金額を入力してください
|
187
|
+
1000000
|
188
|
+
下限金額を入力してください
|
189
|
+
2000000
|
190
|
+
該当する車種は存在しません
|
191
|
+
/MENU/
|
192
|
+
「0」車一覧「1」検索「2」終了
|
193
|
+
1
|
194
|
+
検索の仕方を選択してください
|
195
|
+
「0」車種名「1」値段「2」オプション
|
196
|
+
2
|
197
|
+
欲しいオプションを一つ選んでください
|
198
|
+
「0」キーレス「1」スマートキー「2」パワーウィンドウ「3」ベンチシート「4」シートヒーター「5」シートクーラー「6」本革シート「7」OTTOMAN「8」3列シート「9」後席モニター
|
199
|
+
9
|
200
|
+
名前: アルファード
|
201
|
+
値段: 3,597,000円
|
202
|
+
オプション: キーレス,スマートキー,パワーウィンドウ,シートヒーター,OTTOMAN,3列シート,後席モニター
|
203
|
+
名前: ヴェルファイア
|
204
|
+
値段: 4,306,000円
|
205
|
+
オプション: キーレス,スマートキー,パワーウィンドウ,OTTOMAN,3列シート,後席モニター
|
206
|
+
/MENU/
|
207
|
+
「0」車一覧「1」検索「2」終了
|
208
|
+
2
|
209
|
+
ありがとうございました
|
210
|
+
```
|