質問編集履歴

1

ソース、詳しい条件を追加しました。

2021/06/26 22:35

投稿

pocopiiiiiii
pocopiiiiiii

スコア1

test CHANGED
File without changes
test CHANGED
@@ -1,7 +1,415 @@
1
+ ```java
2
+
3
+ class MyLinkedStack {
4
+
5
+ class Node {
6
+
7
+ Node next = null; // 次のリストへのポインタ
8
+
9
+ String data; // 格納するデータ
10
+
11
+ public Node(String d) {data = d;} // コンストラクター
12
+
13
+ }
14
+
15
+
16
+
17
+ Node head = new Node(null);
18
+
19
+
20
+
21
+ public void push(String item) {
22
+
23
+ Node n = new Node(item);
24
+
25
+ n.next = head;
26
+
27
+ head = n;
28
+
29
+ }
30
+
31
+
32
+
33
+ public String pop() {
34
+
35
+ if (head.next == null)
36
+
37
+ throw new IllegalStateException("空の stack を pop した!"); String item = head.data;
38
+
39
+ head = head.next;
40
+
41
+ return item;
42
+
43
+ }
44
+
45
+
46
+
47
+ public String peek() {
48
+
49
+ if (head.next == null)
50
+
51
+ throw new IllegalStateException("空の stack を peek した!"); return head.data;
52
+
53
+ }
54
+
55
+
56
+
57
+ @Override
58
+
59
+ public String toString() {
60
+
61
+ String str = "[";
62
+
63
+ Node n = head;
64
+
65
+ while (n.next != null && n.next.next != null) {
66
+
67
+ str += n.data + ", ";
68
+
69
+ n = n.next;
70
+
71
+ }
72
+
73
+ if (n.next != null) str += n.data;
74
+
75
+ return str + "]";
76
+
77
+ }
78
+
79
+ }
80
+
81
+
82
+
83
+ ```
84
+
85
+ ```java
86
+
87
+ //MyLinkedStack継承
88
+
89
+ class NewLinkedStack extends MyLinkedStack {
90
+
91
+ Node next = head;
92
+
93
+ MyLinkedStack mls= new MyLinkedStack();
94
+
95
+
96
+
97
+ //public NewLinkedStack(Node head) {
98
+
99
+ // mls.head = head;
100
+
101
+ // TODO 自動生成されたコンストラクター・スタブ
102
+
103
+ ///}
104
+
105
+
106
+
107
+ public boolean remove(String d) {
108
+
109
+ String result = peek();
110
+
111
+ //非存在のデータの確認はこれで良いのかなと思っています
112
+
113
+ if (!(result.equals(d))) {
114
+
115
+ return false;
116
+
117
+ }else {
118
+
119
+ //中間データの削除方法がわかりません
120
+
121
+ //末尾データの削除方法がわかりません
122
+
123
+
124
+
125
+ }
126
+
127
+ return true;
128
+
129
+ }
130
+
131
+ }
132
+
133
+
134
+
135
+ ```
136
+
137
+ ```java
138
+
139
+ // 単元07課題1用事前提供ファイル
140
+
141
+ // 指示に従って作成したプログラムのテストプログラムです
142
+
143
+ // このプログラムを実行して所定の結果が得られることを確認してください
144
+
145
+ // このプログラムは変更しないでください
146
+
147
+
148
+
149
+ class StackTest {
150
+
151
+ public static void main(String[] args) {
152
+
153
+ NewLinkedStack nls = new NewLinkedStack();
154
+
155
+ try {
156
+
157
+ System.out.println("push pop peekのテスト");
158
+
159
+ nls.push("a");
160
+
161
+ nls.push("b");
162
+
163
+ nls.push("c");
164
+
165
+ nls.push("d");
166
+
167
+ nls.push("e");
168
+
169
+ nls.push("f");
170
+
171
+ System.out.println(nls);
172
+
173
+ System.out.println("pop →" + nls.pop());
174
+
175
+ System.out.println("peek →" + nls.peek());
176
+
177
+
178
+
179
+ System.out.println(nls.toString());
180
+
181
+ if (!nls.toString().equals("[e, d, c, b, a]")) {
182
+
183
+
184
+
185
+ System.out.println("push pop peek テスト ■NG " + nls);
186
+
187
+ return;
188
+
189
+ }
190
+
191
+ System.out.println("push pop peek テスト OK " + nls);
192
+
193
+
194
+
195
+ System.out.println("\n項目数が3以上の時のテスト");
196
+
197
+ if (nls.remove("x") || !nls.toString().equals("[e, d, c, b, a]")) {
198
+
199
+ System.out.println("非存在データ削除テスト ■NG " + nls);
200
+
201
+ return;
202
+
203
+ }
204
+
205
+ System.out.println("非存在データ削除 OK " + nls);
206
+
207
+
208
+
209
+ if (!nls.remove("c") || !nls.toString().equals("[e, d, b, a]")) {
210
+
211
+ System.out.println("中間データc削除できず ■NG " + nls);
212
+
213
+ return;
214
+
215
+ }
216
+
217
+ System.out.println("中間データc削除 OK " + nls);
218
+
219
+
220
+
221
+ if (!nls.remove("e") || !nls.toString().equals("[d, b, a]")) {
222
+
223
+ System.out.println("先頭データe削除できず ■NG " + nls);
224
+
225
+ return;
226
+
227
+ }
228
+
229
+ System.out.println("先頭データe削除 OK " + nls);
230
+
231
+
232
+
233
+ if (!nls.remove("a") || !nls.toString().equals("[d, b]")) {
234
+
235
+ System.out.println("末尾データa削除できず ■NG " + nls);
236
+
237
+ return;
238
+
239
+ }
240
+
241
+ System.out.println("末尾データa削除 OK " + nls);
242
+
243
+
244
+
245
+ System.out.println("\n項目数が2の時のテスト");
246
+
247
+ if (nls.remove("x") || !nls.toString().equals("[d, b]")) {
248
+
249
+ System.out.println("非存在データ削除テスト ■NG " + nls);
250
+
251
+ return;
252
+
253
+ }
254
+
255
+ System.out.println("非存在データ削除 OK " + nls);
256
+
257
+
258
+
259
+ if (!nls.remove("b") || !nls.toString().equals("[d]")) {
260
+
261
+ System.out.println("末尾データb削除できず ■NG " + nls);
262
+
263
+ return;
264
+
265
+ }
266
+
267
+ System.out.println("末尾データb削除 OK " + nls);
268
+
269
+
270
+
271
+ nls.push("g");
272
+
273
+ if (!nls.toString().equals("[g, d]")) {
274
+
275
+ System.out.println("pushできず ■NG " + nls);
276
+
277
+ return;
278
+
279
+ }
280
+
281
+ System.out.println("データgのpush OK " + nls);
282
+
283
+
284
+
285
+ if (!nls.remove("g") || !nls.toString().equals("[d]")) {
286
+
287
+ System.out.println("先頭データg削除できず ■NG " + nls);
288
+
289
+ return;
290
+
291
+ }
292
+
293
+ System.out.println("先頭データg削除 OK " + nls);
294
+
295
+
296
+
297
+ System.out.println("\n項目数が1の時のテスト");
298
+
299
+ if (nls.remove("x") || !nls.toString().equals("[d]")) {
300
+
301
+ System.out.println("非存在データ削除テスト ■NG " + nls);
302
+
303
+ return;
304
+
305
+ }
306
+
307
+ System.out.println("非存在データ削除 OK " + nls);
308
+
309
+
310
+
311
+ if (!nls.remove("d") || !nls.toString().equals("[]")) {
312
+
313
+ System.out.println("唯一データd削除できず ■NG " + nls);
314
+
315
+ return;
316
+
317
+ }
318
+
319
+ System.out.println("唯一データd削除 OK " + nls);
320
+
321
+
322
+
323
+ System.out.println("\n項目数が0の時のテスト");
324
+
325
+ if (nls.remove("x") || !nls.toString().equals("[]")) {
326
+
327
+ System.out.println("データ削除テスト ■NG " + nls);
328
+
329
+ return;
330
+
331
+ }
332
+
333
+ System.out.println("データ削除 OK " + nls);
334
+
335
+
336
+
337
+ } catch (IllegalStateException e) {
338
+
339
+ System.out.println(e);
340
+
341
+ }
342
+
343
+ }
344
+
345
+ }
346
+
347
+ /* 実行結果
348
+
349
+ >java StackTest
350
+
351
+ テストプログラム>java StackTest
352
+
353
+ push pop peekのテスト
354
+
355
+ [f, e, d, c, b, a]
356
+
357
+ pop →f
358
+
359
+ peek →e
360
+
361
+ push pop peek テスト OK [e, d, c, b, a]
362
+
363
+
364
+
365
+ 項目数が3以上の時のテスト
366
+
367
+ 非存在データ削除 OK [e, d, c, b, a]
368
+
369
+ 中間データc削除 OK [e, d, b, a]
370
+
371
+ 先頭データe削除 OK [d, b, a]
372
+
373
+ 末尾データa削除 OK [d, b]
374
+
375
+
376
+
377
+ 項目数が2の時のテスト
378
+
379
+ 非存在データ削除 OK [d, b]
380
+
381
+ 末尾データb削除 OK [d]
382
+
383
+ データgのpush OK [g, d]
384
+
385
+ 先頭データg削除 OK [d]
386
+
387
+
388
+
389
+ 項目数が1の時のテスト
390
+
391
+ 非存在データ削除 OK [d]
392
+
393
+ 唯一データd削除 OK []
394
+
395
+
396
+
397
+ 項目数が0の時のテスト
398
+
399
+ データ削除 OK []
400
+
401
+ */
402
+
403
+ // Copyright 2017 FUJITSU APPLICATIONS LIMITED
404
+
405
+
406
+
407
+ ```
408
+
409
+ 【概要】
410
+
1
411
  Linked Listのスタックを先頭から見ていき、指定データがあれば削除するというプログラムを作成したいです。
2
412
 
3
-
4
-
5
413
  継承しているクラスのメソッドに
6
414
 
7
415
  peek(),pop()しか存在せず、
@@ -10,12 +418,28 @@
10
418
 
11
419
  boolean remove (String d)のみもつという制限がついています。
12
420
 
13
-
14
-
15
421
  peekもpopもスタックの先頭に対しての
16
422
 
17
- メソッドのため、
18
-
19
- どうやって中間データや最後のデータを確認、削除すれば良いかわかりません。
423
+ メソッドのため、どうやって中間データや最後のデータを確認、削除すれば良いかわかりません。
20
424
 
21
425
  教えていただければ幸いです。
426
+
427
+
428
+
429
+ 【条件】
430
+
431
+ NewLinkedStack クラスはMyLinkedStack クラスを継承
432
+
433
+ NewLinkedStack クラスは remove メソッドのみを持つ
434
+
435
+ スタックを先頭から見ていき指定データがあれば削除し true を返す。
436
+
437
+ 指定データが複数あっても最初の 1 つしか削除しない。
438
+
439
+ 指定データがなければ false を返す。
440
+
441
+
442
+
443
+ 【ゴール】
444
+
445
+ tackTest.java を実行して全ての結果でOKが出ること。