回答編集履歴

4

option関係型再修正

2022/09/15 06:57

投稿

jimbe
jimbe

スコア12659

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, EnumSet<Option> options) {
101
+ Car(String name, int price, Set<Option> options) {
102
102
  this.name = name;
103
103
  this.price = price;
104
- this.options = Collections.unmodifiableSet(EnumSet.copyOf(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
- EnumSet<Car.Option> options = EnumSet.noneOf(Car.Option.class);
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 化

2022/09/15 06:30

投稿

jimbe
jimbe

スコア12659

test CHANGED
@@ -96,12 +96,12 @@
96
96
 
97
97
  final String name;
98
98
  final int price;
99
- final EnumSet<Option> options;
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

追加

2022/09/15 02:56

投稿

jimbe
jimbe

スコア12659

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

追加

2022/09/15 02:52

投稿

jimbe
jimbe

スコア12659

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
+ ```