質問編集履歴

13

削除された内容の復元を行いました

2020/08/17 02:57

投稿

tapipi
tapipi

スコア13

test CHANGED
File without changes
test CHANGED
@@ -1 +1,285 @@
1
+ ### 前提・実現したいこと
2
+
3
+ list.set(list.indexOf("i"), "I");
4
+
5
+ を使用して、53番目の位置の値を変更したい。
6
+
7
+ ですが、エラー
8
+
9
+ Exception in thread "main" java.lang.NullPointerException
10
+
11
+ と指定した場所がありませんと表示されます…。
12
+
13
+ どうしたら53番目の値を変更できますか?
14
+
15
+ またリスト内に含まれる「i」を検索して、
16
+
17
+ 大文字に変える方法はございませんか?
18
+
19
+ ```
20
+
21
+ iのインデックスは53です
22
+
23
+ 後ろから調べたiのインデックスは53
24
+
25
+ ```
26
+
27
+ ### 該当のソースコード
28
+
29
+ ```java
30
+
31
+ import java.io.*;
32
+
33
+ import java.util.*;
34
+
35
+ public class Q {
36
+
37
+ //   「1つ以上のスペース、ピリオド、コンマ、セミコロンのどれか」という意味
38
+
39
+ // |は区切ったもののどれかという意味で、.は単にピリオドです(文字列表記する都合上、バックスラッシュが2つ必要)
40
+
41
+ private static final String SEPARATOR = "(\s+?|\.|,|;)";
42
+
43
+ /**
44
+
45
+ * データファイルを開く
46
+
47
+ * resources/q003/data.txt
48
+
49
+ */
50
+
51
+ private static InputStream openDataFile() {
52
+
53
+ //getResourceAsStreamメソッドを利用すると、リソースファイル(設定ファイルなどのこと)を簡単に読み込むことができる
54
+
55
+ return Q.class.getResourceAsStream("data.txt");
56
+
57
+ }
58
+
59
+ public static void main(String[] args){
60
+
61
+ // 集計
62
+
63
+ //カウントには以下のMap<String, Integer>を使用
64
+
65
+ Map<String, Integer> map = new HashMap<>();
66
+
67
+ try (
68
+
69
+ /*
70
+
71
+ ファイルの読み込み main配下にあるresourcesからファイルを取得している
72
+
73
+  FileReaderを使ってファイルを読み込む場合には、1文字読み込んでは1文字処理して、と言うのを繰り返すため、非常に効率が悪い
74
+
75
+ */
76
+
77
+ FileReader fr = new FileReader(Q.class.getResource("data.txt").getFile());
78
+
79
+ /*
80
+
81
+ ファイルの読み込み
82
+
83
+  なぜ最初からこのクラスを使わないかというと、このクラスはFileReaderクラスを拡張する形で利用するため。
84
+
85
+   FileReaderクラスの持つ基本機能でファイルから読み込みは行うが、
86
+
87
+  それにBufferedReaderクラスをかぶせて使うことでまとめて読み込む機能を持てるようになる
88
+
89
+ */
90
+
91
+ BufferedReader br = new BufferedReader(fr)){
92
+
93
+ /*
94
+
95
+ テキストを1行単位で読む
96
+
97
+ 1行まとめて読むための"readLine"メソッドが用意されている。
98
+
99
+ 注意する点は、改行文字は読み込んだ文字に含まれない事
100
+
101
+ よって1行ごとに、改行を含まないテキストを読み込んでString型の値として返す
102
+
103
+ */
104
+
105
+ String line;
106
+
107
+ //テキストファイルの読み取りの箇所ではreadLine()で行を取得
108
+
109
+ while ((line = br.readLine()) != null) {
110
+
111
+ /*
112
+
113
+ 全て大文字に変換する。
114
+
115
+ */
116
+
117
+ String resultline = line.toLowerCase();
118
+
119
+ //splitメソッドでword[]に分割して格納していく。
120
+
121
+ String[] words = resultline.split(SEPARATOR);
122
+
123
+ //繰り返し処理
124
+
125
+ for (String word : words) {
126
+
127
+ //もしwordがからでないなら…   文字列が空かどうかを判定する – isEmptyメソッド
128
+
129
+ //分解後に空白1文字が残る場合に備え、単語の出現数のカウントではisEmpty()メソッドを使用
130
+
131
+ if (!word.isEmpty()) {
132
+
133
+ /*
134
+
135
+ containsKeyメソッドは、指定したキーが存在するか確認を行い、キーが存在する場合は「true」を返します
136
+
137
+ Map.containsKey(検索するキー)
138
+
139
+ キー→単語
140
+
141
+ 値 →出現数
142
+
143
+ 単語wordが与えられたときの処理は以下の考え方。 
144
+
145
+  単語がMapのキーに含まれている場合、出現数を加算する。
146
+
147
+  単語がMapのキーに含まれていない場合、以下をMapに格納する。  
148
+
149
+  キー word
150
+
151
+  値   1
152
+
153
+ */
154
+
155
+ if (map.containsKey(word)) {
156
+
157
+ /*
158
+
159
+ 要素を取り出すためにgetメソッドを使用する。 get(Object key)
160
+
161
+ 要素を格納するためにputメソッドを使用する。 put(K key, V value)
162
+
163
+ */
164
+
165
+ int count = map.get(word) + 1;
166
+
167
+ map.put(word, count);
168
+
169
+ } else {
170
+
171
+ map.put(word, 1);
172
+
173
+ }
174
+
175
+ }
176
+
177
+ }
178
+
179
+ }
180
+
181
+ } catch (FileNotFoundException e) {
182
+
183
+ System.out.println("ファイルが見つかりませんでした。");
184
+
185
+ } catch (IOException e) {
186
+
187
+ System.out.println("読み取りに失敗しました。");
188
+
189
+ }
190
+
191
+ /*
192
+
193
+ アルファベット辞書順に並び変えて出力
194
+
195
+ 条件
196
+
197
+ * - "I"以外は全て小文字で扱う("My"と"my"は同じく"my"として扱う)  
198
+
199
+ * - 単数形と複数形のように少しでも文字列が異れば別単語として扱う("dream"と"dreams"は別単語)
200
+
201
+ * - アポストロフィーやハイフン付の単語は1単語として扱う("isn't"や"dead-end")
202
+
203
+ */
204
+
205
+ List<String> list = new ArrayList<>();
206
+
207
+ int maxLengthOfSpelling = 0;
208
+
209
+ for (String key : map.keySet()) {
210
+
211
+ list.add(key);
212
+
213
+ if (maxLengthOfSpelling < key.length()) {
214
+
215
+ maxLengthOfSpelling = key.length();
216
+
217
+ }
218
+
219
+ }
220
+
221
+ /*
222
+
223
+ アルファベット順にソート
224
+
225
+ "I"以外は全て小文字で扱う("My"と"my"は同じく"my"として扱う)
226
+
227
+ Comparatorインターフェースを用いた方法ではソートするための条件をプログラマが決めることができる。
228
+
229
+ 複雑な条件でのソートやオブジェクトの並び替えを特定のルールに沿って行いたいときは、この方法を用いる
230
+
231
+ */
232
+
233
+ Collections.sort(list, new Comparator<String>() {
234
+
235
+ @Override
236
+
237
+ public int compare(String s1, String s2) {
238
+
239
+ return s1.compareToIgnoreCase(s2);
240
+
241
+ }
242
+
243
+ });
244
+
245
+ /*
246
+
247
+ どこかのタイミングで 格納されているiを見つけ出し、
248
+
249
+ toUpperCaseメソッドで、小文字を大文字に変換すると解決する。
250
+
251
+ */
252
+
1
- \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
253
+ System.out.println("iのインデックスは" + list.indexOf("i") + "です");
254
+
255
+ System.out.println("後ろから調べたiのインデックスは"+list.lastIndexOf("i"));
256
+
257
+ // list.set(list.indexOf("i"), "I");
258
+
259
+ // 全部の値を出力
260
+
261
+ String format = "%-" + maxLengthOfSpelling + "s= %3d";
262
+
263
+ for (String word : list) {
264
+
265
+ int count = map.get(word);
266
+
267
+ //出力の回数を制限するなら、ここで if (出現させたい件数 <= count)で可能
268
+
269
+ System.out.printf(format, word, count);
270
+
271
+ System.out.println();
272
+
273
+ }
274
+
275
+ }
276
+
277
+ }
278
+
279
+ ```
280
+
281
+ 試したこと
282
+
283
+ デバッグで、listの53番目に"i"が格納されていることを確認いたしました。
284
+
285
+ なぜインデック番号53番目に入っているのに値が変更できないのでしょうか?

12

タイトルをかえました

2020/08/17 02:57

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -1,547 +1 @@
1
- ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
2
-
3
-
4
-
5
- CSVファイルだけ操作
6
-
7
- ```java
8
-
9
- package file;
10
-
11
-
12
-
13
-
14
-
15
- import java.io.*;
16
-
17
- import java.net.URL;
18
-
19
-
20
-
21
- public class File {
22
-
23
-
24
-
25
- private static String openDataFile() {
26
-
27
-
28
-
29
- return File.class.getResource("file.csv").getFile();
30
-
31
- }
32
-
33
-
34
-
35
- public static void main(String[] args) throws IOException {
36
-
37
- System.out.println("■ここにresoure配下のfile.csvを表示します");
38
-
39
- disp();
40
-
41
-
42
-
43
- System.out.println("\n■情報を追加します");
44
-
45
- write();
46
-
47
- disp();
48
-
49
-
50
-
51
- }
52
-
53
-
54
-
55
-
56
-
57
- public static void disp(){
58
-
59
- try {
60
-
61
- BufferedReader br = new BufferedReader(new FileReader(openDataFile()));
62
-
63
- String text;
64
-
65
- while((text = br.readLine()) != null){
66
-
67
- System.out.println(text);
68
-
69
- }
70
-
71
- } catch (FileNotFoundException e) {
72
-
73
- e.printStackTrace();
74
-
75
- } catch (IOException e) {
76
-
77
- e.printStackTrace();
78
-
79
- }
80
-
81
- }
82
-
83
-
84
-
85
- public static void write( ) throws IOException {
86
-
87
- FileWriter fw = new FileWriter(openDataFile(), true);
88
-
89
- fw.write("扇風機,300,10\r\n");
90
-
91
- fw.write("録音機,200,2\r\n");
92
-
93
- fw.close();
94
-
95
- }
96
-
97
-
98
-
99
- public static void delete() throws IOException {
100
-
101
-
102
-
103
- }
104
-
105
-
106
-
107
- }
108
-
109
-
110
-
111
-
112
-
113
-
114
-
115
- //次はコレクションを活用して、追加削除変更してみる
116
-
117
- //次はクラスを分けてData専用のクラスを作成する
118
-
119
- }
120
-
121
-
122
-
123
-
124
-
125
- ```
126
-
127
-
128
-
129
- Listを活用した
130
-
131
- ```java
132
-
133
- package collection;
134
-
135
-
136
-
137
- import java.util.ArrayList;
138
-
139
- import java.util.List;
140
-
141
-
142
-
143
- public class Collection {
144
-
145
- //追加するための情報
146
-
147
- private static List<String> data = new ArrayList<>();
148
-
149
-
150
-
151
- public static void main(String[] args) {
152
-
153
- //追加
154
-
155
- data.add("商品名,値段,値段");
156
-
157
- data.add("冷蔵庫,120,120");
158
-
159
- data.add("扇風機,500,500");
160
-
161
- data.add("エアコン,200,200");
162
-
163
- for (String result : data) {
164
-
165
- System.out.println(result);
166
-
167
- }
168
-
169
- System.out.println("");
170
-
171
- //削除
172
-
173
- data.remove(data.get(3));
174
-
175
- for (String result : data) {
176
-
177
- System.out.println(result);
178
-
179
- }
180
-
181
- data.add("テスト追加です"); //最後の行に追加される
182
-
183
-
184
-
185
- //特定の行を上書き
186
-
187
- data.set(1,"変更しました");
188
-
189
- System.out.println("");
190
-
191
- for(int i = 0; i < data.size(); i++){ //別ループでのの表示方法
192
-
193
- String disp = data.get(i);
194
-
195
- System.out.println(disp);
196
-
197
- }
198
-
199
-
200
-
201
- }
202
-
203
- }
204
-
205
-
206
-
207
- ```
208
-
209
-
210
-
211
-
212
-
213
- Listへ入力値が格納されるようにする
214
-
215
-
216
-
217
- ```java
218
-
219
- package collection;
220
-
221
-
222
-
223
- import java.util.ArrayList;
224
-
225
- import java.util.List;
226
-
227
- import java.util.Scanner;
228
-
229
-
230
-
231
-
232
-
233
- public class InputCollection {
234
-
235
- private static List<DataModel> data = new ArrayList<>();
236
-
237
-
238
-
239
- static DataModel dataModel = new DataModel();
240
-
241
-
242
-
243
- /**
244
-
245
- * リストの中身へは入力したものを追加する
246
-
247
- * 商品名、値段、在庫の3つを表示する
248
-
249
- * 追加・変更・削除を済ませる
250
-
251
- */
252
-
253
-
254
-
255
- public static void main(String[] args) {
256
-
257
-
258
-
259
- //インスタンスに引数を入れてDataModelのコンストラクタでセット
260
-
261
- instance();
262
-
263
-
264
-
265
- //入力値を格納して表示する
266
-
267
- Inputinstance();
268
-
269
- }
270
-
271
-
272
-
273
- /**
274
-
275
- * instanceに引数を入れて表示
276
-
277
- * 本来:入力値をDataModelに渡して表示させたい
278
-
279
- */
280
-
281
- public static void instance() {
282
-
283
- //DataModelクラスのインスタンスに各値を設定
284
-
285
- DataModel d0 = new DataModel("商品名", "値段", "在庫");
286
-
287
- DataModel d1 = new DataModel("冷蔵庫", "120", "50");
288
-
289
- DataModel d2 = new DataModel("扇風機", "500", "20");
290
-
291
- DataModel d3 = new DataModel("エアコン", "200", "10");
292
-
293
-
294
-
295
- data.add(d0);
296
-
297
- data.add(d1);
298
-
299
- data.add(d2);
300
-
301
- data.add(d3);
302
-
303
-
304
-
305
- //リストの内容を順に処理
306
-
307
- for (DataModel dm : data) {
308
-
309
- System.out.println(dm.getName() + " " + dm.getPrice() + " " + dm.getStock());
1
+ \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
310
-
311
- }
312
-
313
- }
314
-
315
-
316
-
317
- public static void Inputinstance() {
318
-
319
-
320
-
321
- Scanner scan = new Scanner(System.in);
322
-
323
- System.out.print("商品名を入力してください\n>");
324
-
325
- String tmpName = scan.next();
326
-
327
- System.out.print("値段を入力してください\n>");
328
-
329
- String tmpPrice = scan.next();
330
-
331
- System.out.print("在庫数を入力してください\n>");
332
-
333
- String tmpStock = scan.next();
334
-
335
- dataModel.setName(tmpName);
336
-
337
- dataModel.setPrice(tmpPrice);
338
-
339
- dataModel.setStock(tmpStock);
340
-
341
-
342
-
343
- System.out.println("保存する値"+dataModel.getName() + " " + dataModel.getPrice() + " " + dataModel.getStock()); //ただ入力した値を表示
344
-
345
-
346
-
347
- dataModel.setInputData(tmpName,tmpPrice,tmpStock);
348
-
349
- //DataModelのリストに格納したものを表示
350
-
351
- if (dataModel.getInputData().isEmpty()) {
352
-
353
- System.out.println("DataModelの中身は何も入っていません");
354
-
355
- } else {
356
-
357
- System.out.println(dataModel.getInputData());
358
-
359
- }
360
-
361
-
362
-
363
-
364
-
365
- //TODO DataModelのクラスに入力したデータを格納する☑  これを求められた分だけ格納できるようにすること
366
-
367
- //リストの中身をcsvファイルに出力できたら完成
368
-
369
- }
370
-
371
-
372
-
373
-
374
-
375
- /**
376
-
377
- * https://www.sejuku.net/blog/19097 //サンプルでいじってみること
378
-
379
- * [Map]はインデックスとなるkeyとそのデータとなるvalueの両方を定義することができます。
380
-
381
- * keyには整数値のほかにString型などの変数なども指定することができます。
382
-
383
- * keyに指定した変数から、valueを呼び出すことができます。
384
-
385
- * なお、Mapのキーは重複させることはできません。
386
-
387
- *
388
-
389
- * これに対して、Listは要素を格納した順に自動的に整数値のインデックスが生成され、値と紐づけされます。
390
-
391
- * Listの要素はインデックス番号を指定して、値を呼び出します。
392
-
393
- * keyと関連付けて値を保持する必要がある場合はMapが適しています。
394
-
395
- *
396
-
397
- * また、Listは要素の値で並び順を替えるソートができますが、Mapはそのままではできません。
398
-
399
- *
400
-
401
- * MapのkeyやvalueをListや配列に変換する必要があります。
402
-
403
- * 要素の順番が必要となる場合はListが適しています。これから先の解説を参考にして、目的に合わせて変換できるようにしましょう!
404
-
405
- *
406
-
407
- */
408
-
409
- }
410
-
411
-
412
-
413
-
414
-
415
-
416
-
417
-
418
-
419
- package collection;
420
-
421
-
422
-
423
- import java.util.ArrayList;
424
-
425
- import java.util.List;
426
-
427
-
428
-
429
- public class DataModel {
430
-
431
-
432
-
433
- /*ID*/
434
-
435
- private static int ID = 001;
436
-
437
- /*商品名*/
438
-
439
- private String name;
440
-
441
- /*商品の値段*/
442
-
443
- private String price;
444
-
445
- /*在庫数*/
446
-
447
- private String stock;
448
-
449
-
450
-
451
- //入力値を保持するリスト
452
-
453
- private List<String> inputData = new ArrayList<String>();
454
-
455
-
456
-
457
- public DataModel(){}
458
-
459
-
460
-
461
- public DataModel(String name, String price, String stock){
462
-
463
- DataModel.ID++;
464
-
465
- this.name = name;
466
-
467
- this.price = price;
468
-
469
- this.stock = stock;
470
-
471
-
472
-
473
- }
474
-
475
- public String getName() {
476
-
477
- return name;
478
-
479
- }
480
-
481
-
482
-
483
- public String getPrice() {
484
-
485
- return price;
486
-
487
- }
488
-
489
-
490
-
491
- public String getStock() {
492
-
493
- return stock;
494
-
495
- }
496
-
497
-
498
-
499
- public void setName(String name) {
500
-
501
- this.name = name;
502
-
503
- }
504
-
505
-
506
-
507
- public void setPrice(String price) {
508
-
509
- this.price = price;
510
-
511
- }
512
-
513
-
514
-
515
- public void setStock(String stock) {
516
-
517
- this.stock = stock;
518
-
519
- }
520
-
521
-
522
-
523
- public List<String> getInputData(){
524
-
525
- return inputData;
526
-
527
- }
528
-
529
- public void setInputData(String name, String price, String stock){
530
-
531
- inputData.add(name);
532
-
533
- inputData.add(price);
534
-
535
- inputData.add(stock);
536
-
537
- }
538
-
539
-
540
-
541
- }
542
-
543
-
544
-
545
-
546
-
547
- ```

11

ソースの修正

2020/08/12 13:51

投稿

tapipi
tapipi

スコア13

test CHANGED
File without changes
test CHANGED
@@ -212,6 +212,10 @@
212
212
 
213
213
  Listへ入力値が格納されるようにする
214
214
 
215
+
216
+
217
+ ```java
218
+
215
219
  package collection;
216
220
 
217
221
 

10

わかりやすくしました

2020/07/31 06:28

投稿

tapipi
tapipi

スコア13

test CHANGED
File without changes
test CHANGED
@@ -212,14 +212,10 @@
212
212
 
213
213
  Listへ入力値が格納されるようにする
214
214
 
215
- ```java
216
-
217
215
  package collection;
218
216
 
219
217
 
220
218
 
221
- import javax.xml.crypto.Data;
222
-
223
219
  import java.util.ArrayList;
224
220
 
225
221
  import java.util.List;
@@ -306,15 +302,49 @@
306
302
 
307
303
  for (DataModel dm : data) {
308
304
 
309
- System.out.println(dm.getName() + " " + dm.getPrice() + " " + dm.getStock()); //ただ入力した値を表示
305
+ System.out.println(dm.getName() + " " + dm.getPrice() + " " + dm.getStock());
310
-
306
+
311
- }
307
+ }
308
+
312
-
309
+ }
310
+
311
+
312
+
313
-
313
+ public static void Inputinstance() {
314
+
315
+
316
+
317
+ Scanner scan = new Scanner(System.in);
318
+
319
+ System.out.print("商品名を入力してください\n>");
320
+
321
+ String tmpName = scan.next();
322
+
323
+ System.out.print("値段を入力してください\n>");
324
+
325
+ String tmpPrice = scan.next();
326
+
327
+ System.out.print("在庫数を入力してください\n>");
328
+
329
+ String tmpStock = scan.next();
330
+
331
+ dataModel.setName(tmpName);
332
+
333
+ dataModel.setPrice(tmpPrice);
334
+
335
+ dataModel.setStock(tmpStock);
336
+
337
+
338
+
339
+ System.out.println("保存する値"+dataModel.getName() + " " + dataModel.getPrice() + " " + dataModel.getStock()); //ただ入力した値を表示
340
+
341
+
342
+
343
+ dataModel.setInputData(tmpName,tmpPrice,tmpStock);
314
344
 
315
345
  //DataModelのリストに格納したものを表示
316
346
 
317
- if(dataModel.getInputData().isEmpty()) {
347
+ if (dataModel.getInputData().isEmpty()) {
318
348
 
319
349
  System.out.println("DataModelの中身は何も入っていません");
320
350
 
@@ -326,7 +356,9 @@
326
356
 
327
357
 
328
358
 
359
+
360
+
329
- //TODO DataModelのクラスに入力したデータを格納する
361
+ //TODO DataModelのクラスに入力したデータを格納する☑  これを求められた分だけ格納できるようにすること
330
362
 
331
363
  //リストの中身をcsvファイルに出力できたら完成
332
364
 
@@ -334,40 +366,6 @@
334
366
 
335
367
 
336
368
 
337
- public static void Inputinstance() {
338
-
339
-
340
-
341
- Scanner scan = new Scanner(System.in);
342
-
343
- System.out.print("商品名を入力してください\n>");
344
-
345
- String tmpName = scan.next();
346
-
347
- System.out.print("値段を入力してください\n>");
348
-
349
- String tmpPrice = scan.next();
350
-
351
- System.out.print("在庫数を入力してください\n>");
352
-
353
- String tmpStock = scan.next();
354
-
355
- dataModel.setName(tmpName);
356
-
357
- dataModel.setPrice(tmpPrice);
358
-
359
- dataModel.setStock(tmpStock);
360
-
361
-
362
-
363
- System.out.println(dataModel.getName() + " " + dataModel.getPrice() + " " + dataModel.getStock());
364
-
365
-
366
-
367
- }
368
-
369
-
370
-
371
369
 
372
370
 
373
371
  /**
@@ -408,4 +406,138 @@
408
406
 
409
407
 
410
408
 
409
+
410
+
411
+
412
+
413
+
414
+
415
+ package collection;
416
+
417
+
418
+
419
+ import java.util.ArrayList;
420
+
421
+ import java.util.List;
422
+
423
+
424
+
425
+ public class DataModel {
426
+
427
+
428
+
429
+ /*ID*/
430
+
431
+ private static int ID = 001;
432
+
433
+ /*商品名*/
434
+
435
+ private String name;
436
+
437
+ /*商品の値段*/
438
+
439
+ private String price;
440
+
441
+ /*在庫数*/
442
+
443
+ private String stock;
444
+
445
+
446
+
447
+ //入力値を保持するリスト
448
+
449
+ private List<String> inputData = new ArrayList<String>();
450
+
451
+
452
+
453
+ public DataModel(){}
454
+
455
+
456
+
457
+ public DataModel(String name, String price, String stock){
458
+
459
+ DataModel.ID++;
460
+
461
+ this.name = name;
462
+
463
+ this.price = price;
464
+
465
+ this.stock = stock;
466
+
467
+
468
+
469
+ }
470
+
471
+ public String getName() {
472
+
473
+ return name;
474
+
475
+ }
476
+
477
+
478
+
479
+ public String getPrice() {
480
+
481
+ return price;
482
+
483
+ }
484
+
485
+
486
+
487
+ public String getStock() {
488
+
489
+ return stock;
490
+
491
+ }
492
+
493
+
494
+
495
+ public void setName(String name) {
496
+
497
+ this.name = name;
498
+
499
+ }
500
+
501
+
502
+
503
+ public void setPrice(String price) {
504
+
505
+ this.price = price;
506
+
507
+ }
508
+
509
+
510
+
511
+ public void setStock(String stock) {
512
+
513
+ this.stock = stock;
514
+
515
+ }
516
+
517
+
518
+
519
+ public List<String> getInputData(){
520
+
521
+ return inputData;
522
+
523
+ }
524
+
525
+ public void setInputData(String name, String price, String stock){
526
+
527
+ inputData.add(name);
528
+
529
+ inputData.add(price);
530
+
531
+ inputData.add(stock);
532
+
533
+ }
534
+
535
+
536
+
537
+ }
538
+
539
+
540
+
541
+
542
+
411
543
  ```

9

わかりやすくしました

2020/07/31 06:28

投稿

tapipi
tapipi

スコア13

test CHANGED
File without changes
test CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
 
4
4
 
5
-
5
+ CSVファイルだけ操作
6
6
 
7
7
  ```java
8
8
 
@@ -123,3 +123,289 @@
123
123
 
124
124
 
125
125
  ```
126
+
127
+
128
+
129
+ Listを活用した
130
+
131
+ ```java
132
+
133
+ package collection;
134
+
135
+
136
+
137
+ import java.util.ArrayList;
138
+
139
+ import java.util.List;
140
+
141
+
142
+
143
+ public class Collection {
144
+
145
+ //追加するための情報
146
+
147
+ private static List<String> data = new ArrayList<>();
148
+
149
+
150
+
151
+ public static void main(String[] args) {
152
+
153
+ //追加
154
+
155
+ data.add("商品名,値段,値段");
156
+
157
+ data.add("冷蔵庫,120,120");
158
+
159
+ data.add("扇風機,500,500");
160
+
161
+ data.add("エアコン,200,200");
162
+
163
+ for (String result : data) {
164
+
165
+ System.out.println(result);
166
+
167
+ }
168
+
169
+ System.out.println("");
170
+
171
+ //削除
172
+
173
+ data.remove(data.get(3));
174
+
175
+ for (String result : data) {
176
+
177
+ System.out.println(result);
178
+
179
+ }
180
+
181
+ data.add("テスト追加です"); //最後の行に追加される
182
+
183
+
184
+
185
+ //特定の行を上書き
186
+
187
+ data.set(1,"変更しました");
188
+
189
+ System.out.println("");
190
+
191
+ for(int i = 0; i < data.size(); i++){ //別ループでのの表示方法
192
+
193
+ String disp = data.get(i);
194
+
195
+ System.out.println(disp);
196
+
197
+ }
198
+
199
+
200
+
201
+ }
202
+
203
+ }
204
+
205
+
206
+
207
+ ```
208
+
209
+
210
+
211
+
212
+
213
+ Listへ入力値が格納されるようにする
214
+
215
+ ```java
216
+
217
+ package collection;
218
+
219
+
220
+
221
+ import javax.xml.crypto.Data;
222
+
223
+ import java.util.ArrayList;
224
+
225
+ import java.util.List;
226
+
227
+ import java.util.Scanner;
228
+
229
+
230
+
231
+
232
+
233
+ public class InputCollection {
234
+
235
+ private static List<DataModel> data = new ArrayList<>();
236
+
237
+
238
+
239
+ static DataModel dataModel = new DataModel();
240
+
241
+
242
+
243
+ /**
244
+
245
+ * リストの中身へは入力したものを追加する
246
+
247
+ * 商品名、値段、在庫の3つを表示する
248
+
249
+ * 追加・変更・削除を済ませる
250
+
251
+ */
252
+
253
+
254
+
255
+ public static void main(String[] args) {
256
+
257
+
258
+
259
+ //インスタンスに引数を入れてDataModelのコンストラクタでセット
260
+
261
+ instance();
262
+
263
+
264
+
265
+ //入力値を格納して表示する
266
+
267
+ Inputinstance();
268
+
269
+ }
270
+
271
+
272
+
273
+ /**
274
+
275
+ * instanceに引数を入れて表示
276
+
277
+ * 本来:入力値をDataModelに渡して表示させたい
278
+
279
+ */
280
+
281
+ public static void instance() {
282
+
283
+ //DataModelクラスのインスタンスに各値を設定
284
+
285
+ DataModel d0 = new DataModel("商品名", "値段", "在庫");
286
+
287
+ DataModel d1 = new DataModel("冷蔵庫", "120", "50");
288
+
289
+ DataModel d2 = new DataModel("扇風機", "500", "20");
290
+
291
+ DataModel d3 = new DataModel("エアコン", "200", "10");
292
+
293
+
294
+
295
+ data.add(d0);
296
+
297
+ data.add(d1);
298
+
299
+ data.add(d2);
300
+
301
+ data.add(d3);
302
+
303
+
304
+
305
+ //リストの内容を順に処理
306
+
307
+ for (DataModel dm : data) {
308
+
309
+ System.out.println(dm.getName() + " " + dm.getPrice() + " " + dm.getStock()); //ただ入力した値を表示
310
+
311
+ }
312
+
313
+
314
+
315
+ //DataModelのリストに格納したものを表示
316
+
317
+ if(dataModel.getInputData().isEmpty()) {
318
+
319
+ System.out.println("DataModelの中身は何も入っていません");
320
+
321
+ } else {
322
+
323
+ System.out.println(dataModel.getInputData());
324
+
325
+ }
326
+
327
+
328
+
329
+ //TODO DataModelのクラスに入力したデータを格納する
330
+
331
+ //リストの中身をcsvファイルに出力できたら完成
332
+
333
+ }
334
+
335
+
336
+
337
+ public static void Inputinstance() {
338
+
339
+
340
+
341
+ Scanner scan = new Scanner(System.in);
342
+
343
+ System.out.print("商品名を入力してください\n>");
344
+
345
+ String tmpName = scan.next();
346
+
347
+ System.out.print("値段を入力してください\n>");
348
+
349
+ String tmpPrice = scan.next();
350
+
351
+ System.out.print("在庫数を入力してください\n>");
352
+
353
+ String tmpStock = scan.next();
354
+
355
+ dataModel.setName(tmpName);
356
+
357
+ dataModel.setPrice(tmpPrice);
358
+
359
+ dataModel.setStock(tmpStock);
360
+
361
+
362
+
363
+ System.out.println(dataModel.getName() + " " + dataModel.getPrice() + " " + dataModel.getStock());
364
+
365
+
366
+
367
+ }
368
+
369
+
370
+
371
+
372
+
373
+ /**
374
+
375
+ * https://www.sejuku.net/blog/19097 //サンプルでいじってみること
376
+
377
+ * [Map]はインデックスとなるkeyとそのデータとなるvalueの両方を定義することができます。
378
+
379
+ * keyには整数値のほかにString型などの変数なども指定することができます。
380
+
381
+ * keyに指定した変数から、valueを呼び出すことができます。
382
+
383
+ * なお、Mapのキーは重複させることはできません。
384
+
385
+ *
386
+
387
+ * これに対して、Listは要素を格納した順に自動的に整数値のインデックスが生成され、値と紐づけされます。
388
+
389
+ * Listの要素はインデックス番号を指定して、値を呼び出します。
390
+
391
+ * keyと関連付けて値を保持する必要がある場合はMapが適しています。
392
+
393
+ *
394
+
395
+ * また、Listは要素の値で並び順を替えるソートができますが、Mapはそのままではできません。
396
+
397
+ *
398
+
399
+ * MapのkeyやvalueをListや配列に変換する必要があります。
400
+
401
+ * 要素の順番が必要となる場合はListが適しています。これから先の解説を参考にして、目的に合わせて変換できるようにしましょう!
402
+
403
+ *
404
+
405
+ */
406
+
407
+ }
408
+
409
+
410
+
411
+ ```

8

タイトルをわかりやすくしました

2020/07/31 05:58

投稿

tapipi
tapipi

スコア13

test CHANGED
File without changes
test CHANGED
@@ -86,9 +86,9 @@
86
86
 
87
87
  FileWriter fw = new FileWriter(openDataFile(), true);
88
88
 
89
- fw.write("雑煮\r\n");
89
+ fw.write("扇風機,300,10\r\n");
90
90
 
91
- fw.write("fkaodkfoafsd");
91
+ fw.write("録音機,200,2\r\n");
92
92
 
93
93
  fw.close();
94
94
 
@@ -96,7 +96,11 @@
96
96
 
97
97
 
98
98
 
99
- public static void delete(){
99
+ public static void delete() throws IOException {
100
+
101
+
102
+
103
+ }
100
104
 
101
105
 
102
106
 
@@ -108,7 +112,7 @@
108
112
 
109
113
 
110
114
 
111
- //次はコレクションを活用して、追加削除してみる
115
+ //次はコレクションを活用して、追加削除変更してみる
112
116
 
113
117
  //次はクラスを分けてData専用のクラスを作成する
114
118
 
@@ -116,4 +120,6 @@
116
120
 
117
121
 
118
122
 
123
+
124
+
119
125
  ```

7

タイトルをわかりやすくしました

2020/07/31 02:58

投稿

tapipi
tapipi

スコア13

test CHANGED
File without changes
test CHANGED
@@ -1 +1,119 @@
1
1
  ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
2
+
3
+
4
+
5
+
6
+
7
+ ```java
8
+
9
+ package file;
10
+
11
+
12
+
13
+
14
+
15
+ import java.io.*;
16
+
17
+ import java.net.URL;
18
+
19
+
20
+
21
+ public class File {
22
+
23
+
24
+
25
+ private static String openDataFile() {
26
+
27
+
28
+
29
+ return File.class.getResource("file.csv").getFile();
30
+
31
+ }
32
+
33
+
34
+
35
+ public static void main(String[] args) throws IOException {
36
+
37
+ System.out.println("■ここにresoure配下のfile.csvを表示します");
38
+
39
+ disp();
40
+
41
+
42
+
43
+ System.out.println("\n■情報を追加します");
44
+
45
+ write();
46
+
47
+ disp();
48
+
49
+
50
+
51
+ }
52
+
53
+
54
+
55
+
56
+
57
+ public static void disp(){
58
+
59
+ try {
60
+
61
+ BufferedReader br = new BufferedReader(new FileReader(openDataFile()));
62
+
63
+ String text;
64
+
65
+ while((text = br.readLine()) != null){
66
+
67
+ System.out.println(text);
68
+
69
+ }
70
+
71
+ } catch (FileNotFoundException e) {
72
+
73
+ e.printStackTrace();
74
+
75
+ } catch (IOException e) {
76
+
77
+ e.printStackTrace();
78
+
79
+ }
80
+
81
+ }
82
+
83
+
84
+
85
+ public static void write( ) throws IOException {
86
+
87
+ FileWriter fw = new FileWriter(openDataFile(), true);
88
+
89
+ fw.write("雑煮\r\n");
90
+
91
+ fw.write("fkaodkfoafsd");
92
+
93
+ fw.close();
94
+
95
+ }
96
+
97
+
98
+
99
+ public static void delete(){
100
+
101
+
102
+
103
+ }
104
+
105
+
106
+
107
+
108
+
109
+
110
+
111
+ //次はコレクションを活用して、追加削除してみる
112
+
113
+ //次はクラスを分けてData専用のクラスを作成する
114
+
115
+ }
116
+
117
+
118
+
119
+ ```

6

実現したいことを追加。

2020/07/31 02:43

投稿

tapipi
tapipi

スコア13

test CHANGED
File without changes
test CHANGED
@@ -1,483 +1 @@
1
- ```java
2
-
3
- package model;
4
-
5
-
6
-
7
- import javax.xml.crypto.Data;
8
-
9
- import java.math.BigDecimal;
10
-
11
-
12
-
13
- public class EqualAction implements CalculatorAction {
14
-
15
- /**
16
-
17
- * Equalクラス
18
-
19
- * 「=」が押下されたときの演算結果を表示する
20
-
21
- */
22
-
23
- @Override
24
-
25
- public void doAction() {
26
-
27
-
28
-
29
- //入力値の最後に「.」が押下されていた時
30
-
31
- if (DataModel.getInputNum().endsWith(".")) {
32
-
33
- //「.」を消して表示する
34
-
35
- DataModel.setInputNum(DataModel.getInputNum().replace(".", ""));
36
-
37
- }
38
-
39
-
40
-
41
- if (DataModel.getOperator().isEmpty()) {
42
-
43
- //入力値をそのまま演算結果に格納
44
-
45
- DataModel.setText(DataModel.getResult());
46
-
47
- DataModel.setOperator("=");
48
-
49
- DataModel.setFormula(DataModel.getFormula() + "="); //ここで=しか反映されてない
50
-
51
- DataModel.setInputNum("");
52
-
53
-
54
-
55
- /* テスト:先頭にもってくるのは意味なし。
56
-
57
- 【前提】分けないといけない  DataModel.getInputNum().equals("")) OR もしくはisEnpty()最後に持ってくr?
58
-
59
- DataModel.setFormula(DataModel.getInputNum() + "=");で無事 入力値と=が一緒に表示される
60
-
61
- テキストエリアにはgetInputNum()でもいれておけばいい
62
-
63
- */
64
-
65
-
66
-
67
- //計算式表示エリアの末尾が「^2」の時
68
-
69
- } else if (DataModel.getFormula().endsWith("^2")) {
70
-
71
- //表示
72
-
73
- DataModel.setText(DataModel.getResult());
74
-
75
- DataModel.setFormula(DataModel.getFormula());
76
-
77
- DataModel.setInputNum("");
78
-
79
- DataModel.setOperator("");
80
-
81
-
82
-
83
- } else if (!DataModel.getOperator().equals("=")) {
84
-
85
- //0で割ったときの結果
86
-
87
- if (new BigDecimal(DataModel.getInputNum()).stripTrailingZeros().equals(new BigDecimal(0)) && DataModel.getOperator().equals("÷")) {
1
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
88
-
89
- //演算結果にエラー表示
90
-
91
- DataModel.setText("0で割れません");
92
-
93
- DataModel.setResult("");
94
-
95
- DataModel.setInputNum("0");
96
-
97
- DataModel.setFormula("");
98
-
99
- DataModel.setOperator("");
100
-
101
-
102
-
103
- }else {
104
-
105
- DataModel.calc();
106
-
107
- DataModel.setOperator("=");
108
-
109
- DataModel.setFormula(DataModel.getFormula() + DataModel.getInputNum() + DataModel.getOperator());
110
-
111
- DataModel.setText(DataModel.getResult());
112
-
113
- DataModel.setInputNum("");
114
-
115
- }
116
-
117
- }
118
-
119
- }
120
-
121
- }
122
-
123
- ```
124
-
125
-
126
-
127
- ```java
128
-
129
- package model;
130
-
131
-
132
-
133
- public class DotAction implements CalculatorAction {
134
-
135
- @Override
136
-
137
- public void doAction() {
138
-
139
-
140
-
141
- /*入力値に「.」が含まれているか判定*/
142
-
143
- int result = DataModel.getText().indexOf(".");
144
-
145
-
146
-
147
- /*「.」が含まれていなければ追加*/
148
-
149
-
150
-
151
- if(!(DataModel.getText().equals("17桁以上は表示できません") || DataModel.getText().equals("0で割れません"))) {
152
-
153
-
154
-
155
- if (result == -1) {
156
-
157
-
158
-
159
- DataModel.setInputNum(DataModel.getInputNum() + ".");
160
-
161
-
162
-
163
- DataModel.setText(DataModel.getInputNum());
164
-
165
- }
166
-
167
- }
168
-
169
- }
170
-
171
- }
172
-
173
-
174
-
175
-
176
-
177
- ```
178
-
179
-
180
-
181
-
182
-
183
- ```java
184
-
185
- package model;
186
-
187
-
188
-
189
- /**
190
-
191
- * 各ModelパッケージのクラスにdoActionを定義させます。
192
-
193
- */
194
-
195
- public interface CalculatorAction {
196
-
197
- public void doAction();
198
-
199
- }
200
-
201
-
202
-
203
- ```
204
-
205
- ```java
206
-
207
- package model;
208
-
209
-
210
-
211
- public class DeleteAction implements CalculatorAction {
212
-
213
-
214
-
215
- /* 入力中の数値の末尾一文字を消去する */
216
-
217
- @Override
218
-
219
- public void doAction() {
220
-
221
- /* イコールの後に押下されたとき */
222
-
223
- if (DataModel.getFormula().endsWith("=")) {
224
-
225
- DataModel.setFormula("");
226
-
227
- DataModel.setResult("");
228
-
229
- DataModel.setOperator("");
230
-
231
- DataModel.setInputNum("0");
232
-
233
- DataModel.setText(DataModel.getInputNum());
234
-
235
-
236
-
237
- /* 入力値に-を含んでいて、長さが2文字の時 */
238
-
239
- } else if (DataModel.getText().contains("-") && (DataModel.getText().length() == 2)) {
240
-
241
- DataModel.setInputNum("0");
242
-
243
- DataModel.setText(DataModel.getInputNum());
244
-
245
-
246
-
247
- /* ウィンドウに「17桁以上は表示できません」と出ている時、「0で割れません」と表示されている時か入力値が1文字の時 */
248
-
249
- } else if ((DataModel.getText().equals("17桁以上は表示できません") || DataModel.getText().equals("0で割れません")
250
-
251
- || (DataModel.getText().length() == 1))) {
252
-
253
- DataModel.setInputNum("0");
254
-
255
- DataModel.setText(DataModel.getInputNum());
256
-
257
-
258
-
259
- /* 上の2つの条件に当てはまらない時 */
260
-
261
- } else {
262
-
263
- DataModel.setInputNum(DataModel.getInputNum().substring(0, DataModel.getInputNum().length() - 1));
264
-
265
- DataModel.setText(DataModel.getInputNum());
266
-
267
- }
268
-
269
-
270
-
271
- }
272
-
273
-
274
-
275
-
276
-
277
- }
278
-
279
-
280
-
281
-
282
-
283
- ```
284
-
285
-
286
-
287
- ## ■■■本日の作業予定■■■
288
-
289
- ### ●個人作業
290
-
291
- 【作業目標】<br>
292
-
293
-
294
-
295
- *
296
-
297
- <br>
298
-
299
-
300
-
301
-
302
-
303
- 【作業内容】<br>
304
-
305
- ■(予定60%)<br>
306
-
307
- より具体的には以下の機能(上から順に着手)<br>
308
-
309
- *
310
-
311
- *
312
-
313
- *
314
-
315
-
316
-
317
-
318
-
319
-
320
-
321
-
322
-
323
- ### ●グループ作業
324
-
325
- 【作業目標】<br>
326
-
327
-
328
-
329
- *
330
-
331
-
332
-
333
- <br>
334
-
335
- 【作業内容】<br>
336
-
337
- ■(予定100%)<br>
338
-
339
- より具体的には以下の機能(上から順に着手)<br>
340
-
341
-
342
-
343
- *
344
-
345
- *
346
-
347
-
348
-
349
-
350
-
351
- <br>
352
-
353
-
354
-
355
- ## ■■■本日の作業振り返り■■■
356
-
357
- ### ●個人作業
358
-
359
- 【作業目標】<br>
360
-
361
-
362
-
363
-
364
-
365
- *
366
-
367
-
368
-
369
-
370
-
371
- <br>
372
-
373
- 【作業内容】<br>
374
-
375
- ■(10%)<br>
376
-
377
- より具体的には以下の機能(上から順に着手)<br>
378
-
379
-
380
-
381
- *
382
-
383
- *
384
-
385
-
386
-
387
- ■ハッシュ探索法に着手(100%)<br>
388
-
389
-
390
-
391
-
392
-
393
- <br>
394
-
395
- 【できたこと】<br>
396
-
397
-
398
-
399
- * 。
400
-
401
-
402
-
403
- <br>
404
-
405
- 【できなかったこと・改善点】<br>
406
-
407
-
408
-
409
- *
410
-
411
- <br>
412
-
413
-
414
-
415
- ### ●グループ作業<br>
416
-
417
-
418
-
419
- *
420
-
421
- *
422
-
423
- <br>
424
-
425
-
426
-
427
- ## ■■■翌日の作業予定■■■
428
-
429
- ### ●個人作業
430
-
431
- 【作業目標】<br>
432
-
433
-
434
-
435
- *
436
-
437
- <br>
438
-
439
-
440
-
441
- 【作業内容】<br>
442
-
443
- ■(予定60%)<br>
444
-
445
- より具体的には以下の機能(上から順に着手)<br>
446
-
447
- *
448
-
449
- <br>
450
-
451
-
452
-
453
-
454
-
455
-
456
-
457
-
458
-
459
- ### ●グループ作業
460
-
461
- 【作業目標】<br>
462
-
463
-
464
-
465
-
466
-
467
- *
468
-
469
-
470
-
471
- <br>
472
-
473
- 【作業内容】<br>
474
-
475
- ■(予定100%)
476
-
477
- より具体的には以下の機能(上から順に着手)
478
-
479
-
480
-
481
- *
482
-
483
- *

5

わかりやすくしました

2020/07/29 11:13

投稿

tapipi
tapipi

スコア13

test CHANGED
File without changes
test CHANGED
@@ -284,14 +284,200 @@
284
284
 
285
285
 
286
286
 
287
+ ## ■■■本日の作業予定■■■
288
+
287
- ```java
289
+ ### ●個人作業
290
+
288
-
291
+ 【作業目標】<br>
292
+
293
+
294
+
289
- ```
295
+ *
296
+
290
-
297
+ <br>
298
+
299
+
300
+
301
+
302
+
303
+ 【作業内容】<br>
304
+
305
+ ■(予定60%)<br>
306
+
307
+ より具体的には以下の機能(上から順に着手)<br>
308
+
309
+ *
310
+
311
+ *
312
+
313
+ *
314
+
315
+
316
+
317
+
318
+
319
+
320
+
321
+
322
+
323
+ ### ●グループ作業
324
+
325
+ 【作業目標】<br>
326
+
327
+
328
+
329
+ *
330
+
331
+
332
+
333
+ <br>
334
+
335
+ 【作業内容】<br>
336
+
337
+ ■(予定100%)<br>
338
+
339
+ より具体的には以下の機能(上から順に着手)<br>
340
+
341
+
342
+
343
+ *
344
+
345
+ *
346
+
347
+
348
+
349
+
350
+
351
+ <br>
352
+
353
+
354
+
355
+ ## ■■■本日の作業振り返り■■■
356
+
291
- ```java
357
+ ### ●個人作業
358
+
292
-
359
+ 【作業目標】<br>
360
+
361
+
362
+
363
+
364
+
365
+ *
366
+
367
+
368
+
369
+
370
+
371
+ <br>
372
+
373
+ 【作業内容】<br>
374
+
375
+ ■(10%)<br>
376
+
377
+ より具体的には以下の機能(上から順に着手)<br>
378
+
379
+
380
+
381
+ *
382
+
383
+ *
384
+
385
+
386
+
387
+ ■ハッシュ探索法に着手(100%)<br>
388
+
389
+
390
+
391
+
392
+
393
+ <br>
394
+
395
+ 【できたこと】<br>
396
+
397
+
398
+
293
- ```
399
+ * 。
400
+
401
+
402
+
294
-
403
+ <br>
404
+
405
+ 【できなかったこと・改善点】<br>
406
+
407
+
408
+
409
+ *
410
+
411
+ <br>
412
+
413
+
414
+
415
+ ### ●グループ作業<br>
416
+
417
+
418
+
419
+ *
420
+
421
+ *
422
+
423
+ <br>
424
+
425
+
426
+
427
+ ## ■■■翌日の作業予定■■■
428
+
295
- ```java
429
+ ### ●個人作業
430
+
296
-
431
+ 【作業目標】<br>
432
+
433
+
434
+
297
- ```
435
+ *
436
+
437
+ <br>
438
+
439
+
440
+
441
+ 【作業内容】<br>
442
+
443
+ ■(予定60%)<br>
444
+
445
+ より具体的には以下の機能(上から順に着手)<br>
446
+
447
+ *
448
+
449
+ <br>
450
+
451
+
452
+
453
+
454
+
455
+
456
+
457
+
458
+
459
+ ### ●グループ作業
460
+
461
+ 【作業目標】<br>
462
+
463
+
464
+
465
+
466
+
467
+ *
468
+
469
+
470
+
471
+ <br>
472
+
473
+ 【作業内容】<br>
474
+
475
+ ■(予定100%)
476
+
477
+ より具体的には以下の機能(上から順に着手)
478
+
479
+
480
+
481
+ *
482
+
483
+ *

4

わかりやすくしました

2020/07/29 08:46

投稿

tapipi
tapipi

スコア13

test CHANGED
File without changes
test CHANGED
@@ -1,35 +1,297 @@
1
- ### 前提・実現したいこと
2
-
3
-
4
-
5
- list.set(list.indexOf("i"), "I");
6
-
7
- を使用して、53番目の位置の値を変更したい。
8
-
9
-
10
-
11
- ですが、エラー
12
-
13
- Exception in thread "main" java.lang.NullPointerException
14
-
15
- と指定した場所がありませんと表示されます…。
16
-
17
- どうしたら53番目の値を変更できますか?
18
-
19
-
20
-
21
- またリスト内に含まれる「i」を検索して、
22
-
23
- 大文字に変える方法はございませんか?
24
-
25
-
26
-
27
- ```
28
-
29
- iインデックスは53です
30
-
31
- 後ろから調べたiのインデックスは53
32
-
33
-
34
-
35
- ```
1
+ ```java
2
+
3
+ package model;
4
+
5
+
6
+
7
+ import javax.xml.crypto.Data;
8
+
9
+ import java.math.BigDecimal;
10
+
11
+
12
+
13
+ public class EqualAction implements CalculatorAction {
14
+
15
+ /**
16
+
17
+ * Equalクラス
18
+
19
+ * 「=」が押下されたときの演算結果を表示する
20
+
21
+ */
22
+
23
+ @Override
24
+
25
+ public void doAction() {
26
+
27
+
28
+
29
+ //入力値最後に「.」が押下されていた時
30
+
31
+ if (DataModel.getInputNum().endsWith(".")) {
32
+
33
+ //「.」を消して表示する
34
+
35
+ DataModel.setInputNum(DataModel.getInputNum().replace(".", ""));
36
+
37
+ }
38
+
39
+
40
+
41
+ if (DataModel.getOperator().isEmpty()) {
42
+
43
+ //入力値をそのまま演算結果に格納
44
+
45
+ DataModel.setText(DataModel.getResult());
46
+
47
+ DataModel.setOperator("=");
48
+
49
+ DataModel.setFormula(DataModel.getFormula() + "="); //ここで=しか反映されてない
50
+
51
+ DataModel.setInputNum("");
52
+
53
+
54
+
55
+ /* テスト:先頭にもってくるのは意味なし。
56
+
57
+ 【前提】分けないといけない  DataModel.getInputNum().equals("")) OR もしくはisEnpty()最後に持ってくr?
58
+
59
+ DataModel.setFormula(DataModel.getInputNum() + "=");で無事 入力値と=が一緒に表示される
60
+
61
+ テキストエリアにはgetInputNum()でもいれておけばいい
62
+
63
+ */
64
+
65
+
66
+
67
+ //計算式表示エリアの末尾が「^2」の時
68
+
69
+ } else if (DataModel.getFormula().endsWith("^2")) {
70
+
71
+ //表示
72
+
73
+ DataModel.setText(DataModel.getResult());
74
+
75
+ DataModel.setFormula(DataModel.getFormula());
76
+
77
+ DataModel.setInputNum("");
78
+
79
+ DataModel.setOperator("");
80
+
81
+
82
+
83
+ } else if (!DataModel.getOperator().equals("=")) {
84
+
85
+ //0で割ったときの結果
86
+
87
+ if (new BigDecimal(DataModel.getInputNum()).stripTrailingZeros().equals(new BigDecimal(0)) && DataModel.getOperator().equals("÷")) {
88
+
89
+ //演算結果にエラー表示
90
+
91
+ DataModel.setText("0で割れません");
92
+
93
+ DataModel.setResult("");
94
+
95
+ DataModel.setInputNum("0");
96
+
97
+ DataModel.setFormula("");
98
+
99
+ DataModel.setOperator("");
100
+
101
+
102
+
103
+ }else {
104
+
105
+ DataModel.calc();
106
+
107
+ DataModel.setOperator("=");
108
+
109
+ DataModel.setFormula(DataModel.getFormula() + DataModel.getInputNum() + DataModel.getOperator());
110
+
111
+ DataModel.setText(DataModel.getResult());
112
+
113
+ DataModel.setInputNum("");
114
+
115
+ }
116
+
117
+ }
118
+
119
+ }
120
+
121
+ }
122
+
123
+ ```
124
+
125
+
126
+
127
+ ```java
128
+
129
+ package model;
130
+
131
+
132
+
133
+ public class DotAction implements CalculatorAction {
134
+
135
+ @Override
136
+
137
+ public void doAction() {
138
+
139
+
140
+
141
+ /*入力値に「.」が含まれているか判定*/
142
+
143
+ int result = DataModel.getText().indexOf(".");
144
+
145
+
146
+
147
+ /*「.」が含まれていなければ追加*/
148
+
149
+
150
+
151
+ if(!(DataModel.getText().equals("17桁以上は表示できません") || DataModel.getText().equals("0で割れません"))) {
152
+
153
+
154
+
155
+ if (result == -1) {
156
+
157
+
158
+
159
+ DataModel.setInputNum(DataModel.getInputNum() + ".");
160
+
161
+
162
+
163
+ DataModel.setText(DataModel.getInputNum());
164
+
165
+ }
166
+
167
+ }
168
+
169
+ }
170
+
171
+ }
172
+
173
+
174
+
175
+
176
+
177
+ ```
178
+
179
+
180
+
181
+
182
+
183
+ ```java
184
+
185
+ package model;
186
+
187
+
188
+
189
+ /**
190
+
191
+ * 各ModelパッケージのクラスにdoActionを定義させます。
192
+
193
+ */
194
+
195
+ public interface CalculatorAction {
196
+
197
+ public void doAction();
198
+
199
+ }
200
+
201
+
202
+
203
+ ```
204
+
205
+ ```java
206
+
207
+ package model;
208
+
209
+
210
+
211
+ public class DeleteAction implements CalculatorAction {
212
+
213
+
214
+
215
+ /* 入力中の数値の末尾一文字を消去する */
216
+
217
+ @Override
218
+
219
+ public void doAction() {
220
+
221
+ /* イコールの後に押下されたとき */
222
+
223
+ if (DataModel.getFormula().endsWith("=")) {
224
+
225
+ DataModel.setFormula("");
226
+
227
+ DataModel.setResult("");
228
+
229
+ DataModel.setOperator("");
230
+
231
+ DataModel.setInputNum("0");
232
+
233
+ DataModel.setText(DataModel.getInputNum());
234
+
235
+
236
+
237
+ /* 入力値に-を含んでいて、長さが2文字の時 */
238
+
239
+ } else if (DataModel.getText().contains("-") && (DataModel.getText().length() == 2)) {
240
+
241
+ DataModel.setInputNum("0");
242
+
243
+ DataModel.setText(DataModel.getInputNum());
244
+
245
+
246
+
247
+ /* ウィンドウに「17桁以上は表示できません」と出ている時、「0で割れません」と表示されている時か入力値が1文字の時 */
248
+
249
+ } else if ((DataModel.getText().equals("17桁以上は表示できません") || DataModel.getText().equals("0で割れません")
250
+
251
+ || (DataModel.getText().length() == 1))) {
252
+
253
+ DataModel.setInputNum("0");
254
+
255
+ DataModel.setText(DataModel.getInputNum());
256
+
257
+
258
+
259
+ /* 上の2つの条件に当てはまらない時 */
260
+
261
+ } else {
262
+
263
+ DataModel.setInputNum(DataModel.getInputNum().substring(0, DataModel.getInputNum().length() - 1));
264
+
265
+ DataModel.setText(DataModel.getInputNum());
266
+
267
+ }
268
+
269
+
270
+
271
+ }
272
+
273
+
274
+
275
+
276
+
277
+ }
278
+
279
+
280
+
281
+
282
+
283
+ ```
284
+
285
+
286
+
287
+ ```java
288
+
289
+ ```
290
+
291
+ ```java
292
+
293
+ ```
294
+
295
+ ```java
296
+
297
+ ```

3

削除しました

2020/07/29 02:57

投稿

tapipi
tapipi

スコア13

test CHANGED
File without changes
test CHANGED
@@ -33,329 +33,3 @@
33
33
 
34
34
 
35
35
  ```
36
-
37
-
38
-
39
- ### 該当のソースコード
40
-
41
-
42
-
43
- ```java
44
-
45
-
46
-
47
- import java.io.*;
48
-
49
- import java.util.*;
50
-
51
- public class Q {
52
-
53
-
54
-
55
- //   「1つ以上のスペース、ピリオド、コンマ、セミコロンのどれか」という意味
56
-
57
- // |は区切ったもののどれかという意味で、.は単にピリオドです(文字列表記する都合上、バックスラッシュが2つ必要)
58
-
59
- private static final String SEPARATOR = "(\s+?|\.|,|;)";
60
-
61
- /**
62
-
63
- * データファイルを開く
64
-
65
- * resources/q003/data.txt
66
-
67
- */
68
-
69
- private static InputStream openDataFile() {
70
-
71
- //getResourceAsStreamメソッドを利用すると、リソースファイル(設定ファイルなどのこと)を簡単に読み込むことができる
72
-
73
- return Q.class.getResourceAsStream("data.txt");
74
-
75
- }
76
-
77
-
78
-
79
-
80
-
81
-
82
-
83
- public static void main(String[] args){
84
-
85
-
86
-
87
- // 集計
88
-
89
- //カウントには以下のMap<String, Integer>を使用
90
-
91
- Map<String, Integer> map = new HashMap<>();
92
-
93
- try (
94
-
95
- /*
96
-
97
- ファイルの読み込み main配下にあるresourcesからファイルを取得している
98
-
99
-  FileReaderを使ってファイルを読み込む場合には、1文字読み込んでは1文字処理して、と言うのを繰り返すため、非常に効率が悪い
100
-
101
- */
102
-
103
- FileReader fr = new FileReader(Q.class.getResource("data.txt").getFile());
104
-
105
-
106
-
107
- /*
108
-
109
- ファイルの読み込み
110
-
111
-  なぜ最初からこのクラスを使わないかというと、このクラスはFileReaderクラスを拡張する形で利用するため。
112
-
113
-   FileReaderクラスの持つ基本機能でファイルから読み込みは行うが、
114
-
115
-  それにBufferedReaderクラスをかぶせて使うことでまとめて読み込む機能を持てるようになる
116
-
117
- */
118
-
119
- BufferedReader br = new BufferedReader(fr)){
120
-
121
-
122
-
123
- /*
124
-
125
- テキストを1行単位で読む
126
-
127
- 1行まとめて読むための"readLine"メソッドが用意されている。
128
-
129
- 注意する点は、改行文字は読み込んだ文字に含まれない事
130
-
131
- よって1行ごとに、改行を含まないテキストを読み込んでString型の値として返す
132
-
133
- */
134
-
135
- String line;
136
-
137
- //テキストファイルの読み取りの箇所ではreadLine()で行を取得
138
-
139
- while ((line = br.readLine()) != null) {
140
-
141
-
142
-
143
- /*
144
-
145
- 全て大文字に変換する。
146
-
147
- */
148
-
149
- String resultline = line.toLowerCase();
150
-
151
-
152
-
153
- //splitメソッドでword[]に分割して格納していく。
154
-
155
- String[] words = resultline.split(SEPARATOR);
156
-
157
-
158
-
159
- //繰り返し処理
160
-
161
- for (String word : words) {
162
-
163
- //もしwordがからでないなら…   文字列が空かどうかを判定する – isEmptyメソッド
164
-
165
- //分解後に空白1文字が残る場合に備え、単語の出現数のカウントではisEmpty()メソッドを使用
166
-
167
- if (!word.isEmpty()) {
168
-
169
-
170
-
171
-
172
-
173
- /*
174
-
175
- containsKeyメソッドは、指定したキーが存在するか確認を行い、キーが存在する場合は「true」を返します
176
-
177
- Map.containsKey(検索するキー)
178
-
179
-
180
-
181
- キー→単語
182
-
183
- 値 →出現数
184
-
185
-
186
-
187
- 単語wordが与えられたときの処理は以下の考え方。 
188
-
189
-  単語がMapのキーに含まれている場合、出現数を加算する。
190
-
191
-  単語がMapのキーに含まれていない場合、以下をMapに格納する。  
192
-
193
-  キー word
194
-
195
-  値   1
196
-
197
- */
198
-
199
- if (map.containsKey(word)) {
200
-
201
- /*
202
-
203
- 要素を取り出すためにgetメソッドを使用する。 get(Object key)
204
-
205
- 要素を格納するためにputメソッドを使用する。 put(K key, V value)
206
-
207
- */
208
-
209
- int count = map.get(word) + 1;
210
-
211
- map.put(word, count);
212
-
213
- } else {
214
-
215
- map.put(word, 1);
216
-
217
- }
218
-
219
- }
220
-
221
- }
222
-
223
-
224
-
225
- }
226
-
227
- } catch (FileNotFoundException e) {
228
-
229
- System.out.println("ファイルが見つかりませんでした。");
230
-
231
- } catch (IOException e) {
232
-
233
- System.out.println("読み取りに失敗しました。");
234
-
235
- }
236
-
237
-
238
-
239
-
240
-
241
- /*
242
-
243
- アルファベット辞書順に並び変えて出力
244
-
245
- 条件
246
-
247
- * - "I"以外は全て小文字で扱う("My"と"my"は同じく"my"として扱う)  
248
-
249
- * - 単数形と複数形のように少しでも文字列が異れば別単語として扱う("dream"と"dreams"は別単語)
250
-
251
- * - アポストロフィーやハイフン付の単語は1単語として扱う("isn't"や"dead-end")
252
-
253
- */
254
-
255
-
256
-
257
- List<String> list = new ArrayList<>();
258
-
259
- int maxLengthOfSpelling = 0;
260
-
261
-
262
-
263
- for (String key : map.keySet()) {
264
-
265
- list.add(key);
266
-
267
-
268
-
269
- if (maxLengthOfSpelling < key.length()) {
270
-
271
- maxLengthOfSpelling = key.length();
272
-
273
- }
274
-
275
- }
276
-
277
-
278
-
279
-
280
-
281
- /*
282
-
283
- アルファベット順にソート
284
-
285
- "I"以外は全て小文字で扱う("My"と"my"は同じく"my"として扱う)
286
-
287
- Comparatorインターフェースを用いた方法ではソートするための条件をプログラマが決めることができる。
288
-
289
- 複雑な条件でのソートやオブジェクトの並び替えを特定のルールに沿って行いたいときは、この方法を用いる
290
-
291
- */
292
-
293
- Collections.sort(list, new Comparator<String>() {
294
-
295
- @Override
296
-
297
- public int compare(String s1, String s2) {
298
-
299
- return s1.compareToIgnoreCase(s2);
300
-
301
- }
302
-
303
- });
304
-
305
-
306
-
307
-
308
-
309
- /*
310
-
311
- どこかのタイミングで 格納されているiを見つけ出し、
312
-
313
- toUpperCaseメソッドで、小文字を大文字に変換すると解決する。
314
-
315
- */
316
-
317
- System.out.println("iのインデックスは" + list.indexOf("i") + "です");
318
-
319
- System.out.println("後ろから調べたiのインデックスは"+list.lastIndexOf("i"));
320
-
321
- // list.set(list.indexOf("i"), "I");
322
-
323
-
324
-
325
-
326
-
327
-
328
-
329
- // 全部の値を出力
330
-
331
- String format = "%-" + maxLengthOfSpelling + "s= %3d";
332
-
333
- for (String word : list) {
334
-
335
-
336
-
337
- int count = map.get(word);
338
-
339
- //出力の回数を制限するなら、ここで if (出現させたい件数 <= count)で可能
340
-
341
- System.out.printf(format, word, count);
342
-
343
- System.out.println();
344
-
345
-
346
-
347
- }
348
-
349
- }
350
-
351
- }
352
-
353
- ```
354
-
355
-
356
-
357
- 試したこと
358
-
359
- デバッグで、listの53番目に"i"が格納されていることを確認いたしました。
360
-
361
- なぜインデック番号53番目に入っているのに値が変更できないのでしょうか?

2

ソースの修正

2020/07/02 22:04

投稿

tapipi
tapipi

スコア13

test CHANGED
File without changes
test CHANGED
@@ -70,7 +70,7 @@
70
70
 
71
71
  //getResourceAsStreamメソッドを利用すると、リソースファイル(設定ファイルなどのこと)を簡単に読み込むことができる
72
72
 
73
- return Q003.class.getResourceAsStream("data.txt");
73
+ return Q.class.getResourceAsStream("data.txt");
74
74
 
75
75
  }
76
76
 
@@ -100,7 +100,7 @@
100
100
 
101
101
  */
102
102
 
103
- FileReader fr = new FileReader(Q003.class.getResource("data.txt").getFile());
103
+ FileReader fr = new FileReader(Q.class.getResource("data.txt").getFile());
104
104
 
105
105
 
106
106
 

1

わかりやすくしました

2020/07/02 06:15

投稿

tapipi
tapipi

スコア13

test CHANGED
File without changes
test CHANGED
@@ -351,3 +351,11 @@
351
351
  }
352
352
 
353
353
  ```
354
+
355
+
356
+
357
+ 試したこと
358
+
359
+ デバッグで、listの53番目に"i"が格納されていることを確認いたしました。
360
+
361
+ なぜインデック番号53番目に入っているのに値が変更できないのでしょうか?