質問編集履歴

1

メインメソッドの記載.

2019/05/24 23:39

投稿

hinanogi
hinanogi

スコア18

test CHANGED
@@ -1 +1 @@
1
- Eclipseでのjavaのソースコードでメソッドの実装が上手くいかない
1
+ しりとりアプリでのメソッドの実装
test CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  しりとりをおこなうアプリをつくっています.その際のプレイヤークラスに関するメソッドgetHandです.
4
4
 
5
- javadocによると
5
+
6
6
 
7
7
  keyCharに対応するリストをdictionaryから取得,先頭の要素を返す.先頭の要素はリストから消しておく.リストが空になれば,keyCharと対応するリストをdictionaryから削除しておく.
8
8
 
@@ -14,7 +14,9 @@
14
14
 
15
15
  ### 発生している問題・エラーメッセージ
16
16
 
17
- メソッドの実装上手いかない
17
+ メソッドの戻り値正しくない.
18
+
19
+ メインメソッドの「ご」をキーとするデータが存在している.
18
20
 
19
21
 
20
22
 
@@ -26,104 +28,286 @@
26
28
 
27
29
  ソースコード
28
30
 
31
+ import java.util.ArrayList;
32
+
33
+ import java.util.HashMap;
34
+
35
+ import java.util.List;
36
+
37
+ import java.util.Map;
38
+
39
+
40
+
41
+ public abstract class Player {
42
+
43
+ private Map<String, List<String>> dictionary;
44
+
45
+ protected String keyChars;
46
+
47
+ private String name;
48
+
49
+ private String[] words;
50
+
51
+
52
+
53
+ public Player(String name, String[] words) {
54
+
55
+ this.name = name;
56
+
57
+ this.words = words;
58
+
59
+ }
60
+
61
+
62
+
63
+ public abstract void update(String message);
64
+
65
+
66
+
67
+ **public String getHand() {
68
+
69
+ for (String str : words) {
70
+
71
+ if (dictionary.containsKey(keyChars)) {
72
+
73
+ dictionary.get(keyChars).get(0);
74
+
75
+ if(keyChars.isEmpty()){
76
+
77
+ dictionary.remove(str);
78
+
79
+ }
80
+
81
+ }
82
+
83
+ break;
84
+
85
+ }
86
+
87
+
88
+
89
+ return null;
90
+
91
+ }**
92
+
93
+
94
+
95
+ protected void makeDictionary(int length) {
96
+
97
+ dictionary = new HashMap<>();
98
+
99
+ for (String str : words) {
100
+
101
+ String key = str.substring(0, length);
102
+
103
+ if (!dictionary.containsKey(key)) {
104
+
105
+ dictionary.put(key, new ArrayList<String>());
106
+
107
+ }
108
+
109
+ dictionary.get(key).add(str);
110
+
111
+ }
112
+
113
+
114
+
115
+ }
116
+
117
+
118
+
119
+ public String getName() {
120
+
121
+ return name;
122
+
123
+ }
124
+
125
+ }
126
+
29
127
  ```
30
128
 
31
- import java.util.ArrayList;
32
-
33
- import java.util.HashMap;
34
-
35
- import java.util.List;
36
-
37
- import java.util.Map;
38
-
39
-
40
-
41
- public abstract class Player {
42
-
43
- private Map<String, List<String>> dictionary;
44
-
45
- protected String keyChars;
46
-
47
- private String name;
48
-
49
- private String[] words;
50
-
51
-
52
-
53
- public Player(String name, String[] words) {
54
-
55
- this.name = name;
56
-
57
- this.words = words;
58
-
59
- }
60
-
61
-
62
-
63
- public abstract void update(String message);
64
-
65
-
66
-
67
- public String getHand() {
68
-
69
- for (String str : words) {
70
-
71
- if (dictionary.containsKey(keyChars)) {
72
-
73
- dictionary.get(keyChars).get(0);
74
-
75
- if(keyChars.isEmpty()){
76
-
77
- dictionary.remove(str);
129
+ ### メインメソッド
130
+
131
+ java
132
+
133
+ ```
134
+
135
+ public static void メソッドgetHand実装and動作検査() {
136
+
137
+ MethodCheck m = new MethodCheck("getHand", String.class, new Class<?>[]{}, Modifier.PUBLIC, false);
138
+
139
+ printResult(m.isExisit(target2), m.getName()+"が存在する?");
140
+
141
+ printResult(m.isCorrectAccessor(target2), m.getName()+"の修飾子が正しい?");
142
+
143
+ printResult(m.isCorrectReturnType(target2), m.getName()+"の戻り値の型が正しい?");
144
+
145
+ printResult(!m.isAbstract(target2), m.getName()+"をabstractにしていない?");
146
+
147
+
148
+
149
+ Constructor<TestClass2> con = (Constructor<TestClass2>) ConstructorCheck.getConstructor(target, new Class<?>[]{String.class, String[].class});
150
+
151
+ if (con != null) {
152
+
153
+ try {
154
+
155
+ String[] sTest = {"ごりら", "らいおん", "らくだ", "らーめん"};
156
+
157
+ TestClass2 e = con.newInstance("hi", sTest);
158
+
159
+ Method m2 = e.getClass().getSuperclass().getDeclaredMethod("getHand", new Class<?>[]{});
160
+
161
+ Method m4 = e.getClass().getSuperclass().getDeclaredMethod("makeDictionary", new Class<?>[]{int.class});
162
+
163
+ if (m2 != null) {
164
+
165
+ m4.setAccessible(true);
166
+
167
+ m4.invoke(e, new Object[]{1});
168
+
169
+ FieldCheck.setSuperClassPrivateField(e, "keyChars", "ご");
170
+
171
+ String ret = (String) m2.invoke(e, new Object[]{});
172
+
173
+ Map<String, List<String>> map = (Map<String, List<String>>)FieldCheck.getSuperClassPrivateField(e, "dictionary");
174
+
175
+
176
+
177
+ printResult("ごりら".equals(ret),"メソッドgetHandの戻り値は「ごりら」");
178
+
179
+ printResult(!map.containsKey("ご"), "「ご」をキーとするデータが存在しない?");
180
+
181
+
182
+
183
+ ret = (String) m2.invoke(e, new Object[]{});
184
+
185
+ printResult(ret==null,"メソッドgetHandの戻り値はnull?");
186
+
187
+
188
+
189
+ FieldCheck.setSuperClassPrivateField(e, "keyChars", "ら");
190
+
191
+ ret = (String) m2.invoke(e, new Object[]{});
192
+
193
+ printResult("らいおん".equals(ret),"メソッドgetHandの戻り値は「らいおん」");
194
+
195
+ printResult(map.containsKey("ら"), "「ら」をキーとするデータが存在する?");
196
+
197
+ if (map.containsKey("ら")) {
198
+
199
+ printResult(map.get("ら").size() == 2, "「ら」をキーとするデータのサイズは2?");
200
+
201
+ }
202
+
203
+
204
+
205
+ ret = (String) m2.invoke(e, new Object[]{});
206
+
207
+ printResult("らくだ".equals(ret),"メソッドgetHandの戻り値は「らくだ」");
208
+
209
+ printResult(map.containsKey("ら"), "「ら」をキーとするデータが存在すr?");
210
+
211
+ if (map.containsKey("ら")) {
212
+
213
+ printResult(map.get("ら").size() == 1, "「ら」をキーとするデータのサイズは1?");
214
+
215
+ }
216
+
217
+
218
+
219
+ ret = (String) m2.invoke(e, new Object[]{});
220
+
221
+ printResult("らーめん".equals(ret),"メソッドgetHandの戻り値は「らーめん」");
222
+
223
+ printResult(!map.containsKey("ら"), "「ら」をキーとするデータが存在しない?");
78
224
 
79
225
  }
80
226
 
81
- }
82
-
83
- break;
84
-
85
- }
86
-
87
-
88
-
89
- return null;
90
-
91
- }
92
-
93
-
94
-
95
- protected void makeDictionary(int length) {
96
-
97
- dictionary = new HashMap<>();
98
-
99
- for (String str : words) {
100
-
101
- String key = str.substring(0, length);
102
-
103
- if (!dictionary.containsKey(key)) {
104
-
105
- dictionary.put(key, new ArrayList<String>());
106
-
107
- }
108
-
109
- dictionary.get(key).add(str);
110
-
111
- }
112
-
113
-
114
-
115
- }
116
-
117
-
118
-
119
- public String getName() {
120
-
121
- return name;
122
-
123
- }
227
+
228
+
229
+
230
+
231
+ String[] sTest2 = {"おおさか", "きょうと", "ひょうご", "なら", "わかやま", "しが", "おかやま", "ひろしま", "おおいた"};
232
+
233
+ e = con.newInstance("hi", sTest2);
234
+
235
+ m2 = e.getClass().getSuperclass().getDeclaredMethod("getHand", new Class<?>[]{});
236
+
237
+ m4 = e.getClass().getSuperclass().getDeclaredMethod("makeDictionary", new Class<?>[]{int.class});
238
+
239
+ if (m2 != null) {
240
+
241
+ m4.setAccessible(true);
242
+
243
+ m4.invoke(e, new Object[]{2});
244
+
245
+ FieldCheck.setSuperClassPrivateField(e, "keyChars", "きょ");
246
+
247
+
248
+
249
+ String ret = (String) m2.invoke(e, new Object[]{});
250
+
251
+ Map<String, List<String>> map = (Map<String, List<String>>)FieldCheck.getSuperClassPrivateField(e, "dictionary");
252
+
253
+
254
+
255
+ printResult("きょうと".equals(ret),"メソッドgetHandの戻り値は「きょうと」");
256
+
257
+ printResult(!map.containsKey("きょ"), "「きょ」をキーとするデータが存在しない?");
258
+
259
+
260
+
261
+ FieldCheck.setSuperClassPrivateField(e, "keyChars", "ひょ");
262
+
263
+ ret = (String) m2.invoke(e, new Object[]{});
264
+
265
+
266
+
267
+ printResult("ひょうご".equals(ret),"メソッドgetHandの戻り値は「ひょうご」");
268
+
269
+ printResult(!map.containsKey("ひょ"), "「ひょ」をキーとするデータが存在しない?");
270
+
271
+
272
+
273
+ FieldCheck.setSuperClassPrivateField(e, "keyChars", "なら");
274
+
275
+ ret = (String) m2.invoke(e, new Object[]{});
276
+
277
+
278
+
279
+ printResult("なら".equals(ret),"メソッドgetHandの戻り値は「なら」");
280
+
281
+ printResult(!map.containsKey("なら"), "「なら」をキーとするデータが存在しない?");
282
+
283
+
284
+
285
+ FieldCheck.setSuperClassPrivateField(e, "keyChars", "おお");
286
+
287
+ ret = (String) m2.invoke(e, new Object[]{});
288
+
289
+
290
+
291
+ printResult("おおさか".equals(ret),"メソッドgetHandの戻り値は「おおさか」");
292
+
293
+ printResult(map.containsKey("おお"), "「おお」をキーとするデータが存在する?");
294
+
295
+
296
+
297
+ ret = (String) m2.invoke(e, new Object[]{});
298
+
299
+
300
+
301
+ printResult("おおいた".equals(ret),"メソッドgetHandの戻り値は「おおいた」");
302
+
303
+ printResult(!map.containsKey("おお"), "「おお」をキーとするデータが存在しない?");
124
304
 
125
305
  }
126
306
 
307
+ ```
308
+
309
+
310
+
127
311
 
128
312
 
129
313
 
@@ -134,10 +318,14 @@
134
318
 
135
319
 
136
320
 
137
- 何パーンか試しまたが上手くせんでした.
321
+ for文のなかでif文を用い,keyCharsに指定デーがある場合,getによりkeyCharsの先頭要素を取得ていす.まif文によりkeyCharsのリストからの場合,リストをdictionaryから削除していま.
138
322
 
139
323
 
140
324
 
141
325
  ### 補足情報(FW/ツールのバージョンなど)
142
326
 
143
327
  開発環境はEclipseです.
328
+
329
+ javadocのバージョンですが最新のものと思われますが確認方法がわかりません.
330
+
331
+ メインメソッドを追加しました.