質問編集履歴
1
メインメソッドの記載.
title
CHANGED
@@ -1,1 +1,1 @@
|
|
1
|
-
|
1
|
+
しりとりアプリでのメソッドの実装
|
body
CHANGED
@@ -1,18 +1,18 @@
|
|
1
1
|
### 前提・実現したいこと
|
2
2
|
しりとりをおこなうアプリをつくっています.その際のプレイヤークラスに関するメソッドgetHandです.
|
3
|
-
|
3
|
+
|
4
4
|
keyCharに対応するリストをdictionaryから取得,先頭の要素を返す.先頭の要素はリストから消しておく.リストが空になれば,keyCharと対応するリストをdictionaryから削除しておく.
|
5
5
|
戻り値はkeyCharに対応する語彙がなくなった場合はnullを返す.
|
6
6
|
|
7
7
|
|
8
8
|
### 発生している問題・エラーメッセージ
|
9
|
-
メソッドの
|
9
|
+
メソッドの戻り値が正しくない.
|
10
|
+
メインメソッドの「ご」をキーとするデータが存在している.
|
10
11
|
|
11
12
|
### 該当のソースコード
|
12
13
|
java
|
13
14
|
```ここに言語名を入力
|
14
15
|
ソースコード
|
15
|
-
```
|
16
16
|
import java.util.ArrayList;
|
17
17
|
import java.util.HashMap;
|
18
18
|
import java.util.List;
|
@@ -31,7 +31,7 @@
|
|
31
31
|
|
32
32
|
public abstract void update(String message);
|
33
33
|
|
34
|
-
public String getHand() {
|
34
|
+
**public String getHand() {
|
35
35
|
for (String str : words) {
|
36
36
|
if (dictionary.containsKey(keyChars)) {
|
37
37
|
dictionary.get(keyChars).get(0);
|
@@ -43,7 +43,7 @@
|
|
43
43
|
}
|
44
44
|
|
45
45
|
return null;
|
46
|
-
}
|
46
|
+
}**
|
47
47
|
|
48
48
|
protected void makeDictionary(int length) {
|
49
49
|
dictionary = new HashMap<>();
|
@@ -61,12 +61,106 @@
|
|
61
61
|
return name;
|
62
62
|
}
|
63
63
|
}
|
64
|
+
```
|
65
|
+
### メインメソッド
|
66
|
+
java
|
67
|
+
```
|
68
|
+
public static void メソッドgetHand実装and動作検査() {
|
69
|
+
MethodCheck m = new MethodCheck("getHand", String.class, new Class<?>[]{}, Modifier.PUBLIC, false);
|
70
|
+
printResult(m.isExisit(target2), m.getName()+"が存在する?");
|
71
|
+
printResult(m.isCorrectAccessor(target2), m.getName()+"の修飾子が正しい?");
|
72
|
+
printResult(m.isCorrectReturnType(target2), m.getName()+"の戻り値の型が正しい?");
|
73
|
+
printResult(!m.isAbstract(target2), m.getName()+"をabstractにしていない?");
|
64
74
|
|
75
|
+
Constructor<TestClass2> con = (Constructor<TestClass2>) ConstructorCheck.getConstructor(target, new Class<?>[]{String.class, String[].class});
|
76
|
+
if (con != null) {
|
77
|
+
try {
|
78
|
+
String[] sTest = {"ごりら", "らいおん", "らくだ", "らーめん"};
|
79
|
+
TestClass2 e = con.newInstance("hi", sTest);
|
80
|
+
Method m2 = e.getClass().getSuperclass().getDeclaredMethod("getHand", new Class<?>[]{});
|
81
|
+
Method m4 = e.getClass().getSuperclass().getDeclaredMethod("makeDictionary", new Class<?>[]{int.class});
|
82
|
+
if (m2 != null) {
|
83
|
+
m4.setAccessible(true);
|
84
|
+
m4.invoke(e, new Object[]{1});
|
85
|
+
FieldCheck.setSuperClassPrivateField(e, "keyChars", "ご");
|
86
|
+
String ret = (String) m2.invoke(e, new Object[]{});
|
87
|
+
Map<String, List<String>> map = (Map<String, List<String>>)FieldCheck.getSuperClassPrivateField(e, "dictionary");
|
65
88
|
|
89
|
+
printResult("ごりら".equals(ret),"メソッドgetHandの戻り値は「ごりら」");
|
90
|
+
printResult(!map.containsKey("ご"), "「ご」をキーとするデータが存在しない?");
|
66
91
|
|
92
|
+
ret = (String) m2.invoke(e, new Object[]{});
|
93
|
+
printResult(ret==null,"メソッドgetHandの戻り値はnull?");
|
94
|
+
|
95
|
+
FieldCheck.setSuperClassPrivateField(e, "keyChars", "ら");
|
96
|
+
ret = (String) m2.invoke(e, new Object[]{});
|
97
|
+
printResult("らいおん".equals(ret),"メソッドgetHandの戻り値は「らいおん」");
|
98
|
+
printResult(map.containsKey("ら"), "「ら」をキーとするデータが存在する?");
|
99
|
+
if (map.containsKey("ら")) {
|
100
|
+
printResult(map.get("ら").size() == 2, "「ら」をキーとするデータのサイズは2?");
|
101
|
+
}
|
102
|
+
|
103
|
+
ret = (String) m2.invoke(e, new Object[]{});
|
104
|
+
printResult("らくだ".equals(ret),"メソッドgetHandの戻り値は「らくだ」");
|
105
|
+
printResult(map.containsKey("ら"), "「ら」をキーとするデータが存在すr?");
|
106
|
+
if (map.containsKey("ら")) {
|
107
|
+
printResult(map.get("ら").size() == 1, "「ら」をキーとするデータのサイズは1?");
|
108
|
+
}
|
109
|
+
|
110
|
+
ret = (String) m2.invoke(e, new Object[]{});
|
111
|
+
printResult("らーめん".equals(ret),"メソッドgetHandの戻り値は「らーめん」");
|
112
|
+
printResult(!map.containsKey("ら"), "「ら」をキーとするデータが存在しない?");
|
113
|
+
}
|
114
|
+
|
115
|
+
|
116
|
+
String[] sTest2 = {"おおさか", "きょうと", "ひょうご", "なら", "わかやま", "しが", "おかやま", "ひろしま", "おおいた"};
|
117
|
+
e = con.newInstance("hi", sTest2);
|
118
|
+
m2 = e.getClass().getSuperclass().getDeclaredMethod("getHand", new Class<?>[]{});
|
119
|
+
m4 = e.getClass().getSuperclass().getDeclaredMethod("makeDictionary", new Class<?>[]{int.class});
|
120
|
+
if (m2 != null) {
|
121
|
+
m4.setAccessible(true);
|
122
|
+
m4.invoke(e, new Object[]{2});
|
123
|
+
FieldCheck.setSuperClassPrivateField(e, "keyChars", "きょ");
|
124
|
+
|
125
|
+
String ret = (String) m2.invoke(e, new Object[]{});
|
126
|
+
Map<String, List<String>> map = (Map<String, List<String>>)FieldCheck.getSuperClassPrivateField(e, "dictionary");
|
127
|
+
|
128
|
+
printResult("きょうと".equals(ret),"メソッドgetHandの戻り値は「きょうと」");
|
129
|
+
printResult(!map.containsKey("きょ"), "「きょ」をキーとするデータが存在しない?");
|
130
|
+
|
131
|
+
FieldCheck.setSuperClassPrivateField(e, "keyChars", "ひょ");
|
132
|
+
ret = (String) m2.invoke(e, new Object[]{});
|
133
|
+
|
134
|
+
printResult("ひょうご".equals(ret),"メソッドgetHandの戻り値は「ひょうご」");
|
135
|
+
printResult(!map.containsKey("ひょ"), "「ひょ」をキーとするデータが存在しない?");
|
136
|
+
|
137
|
+
FieldCheck.setSuperClassPrivateField(e, "keyChars", "なら");
|
138
|
+
ret = (String) m2.invoke(e, new Object[]{});
|
139
|
+
|
140
|
+
printResult("なら".equals(ret),"メソッドgetHandの戻り値は「なら」");
|
141
|
+
printResult(!map.containsKey("なら"), "「なら」をキーとするデータが存在しない?");
|
142
|
+
|
143
|
+
FieldCheck.setSuperClassPrivateField(e, "keyChars", "おお");
|
144
|
+
ret = (String) m2.invoke(e, new Object[]{});
|
145
|
+
|
146
|
+
printResult("おおさか".equals(ret),"メソッドgetHandの戻り値は「おおさか」");
|
147
|
+
printResult(map.containsKey("おお"), "「おお」をキーとするデータが存在する?");
|
148
|
+
|
149
|
+
ret = (String) m2.invoke(e, new Object[]{});
|
150
|
+
|
151
|
+
printResult("おおいた".equals(ret),"メソッドgetHandの戻り値は「おおいた」");
|
152
|
+
printResult(!map.containsKey("おお"), "「おお」をキーとするデータが存在しない?");
|
153
|
+
}
|
154
|
+
```
|
155
|
+
|
156
|
+
|
157
|
+
|
158
|
+
|
67
159
|
### 試したこと
|
68
160
|
|
69
|
-
|
161
|
+
for文のなかでif文を用い,keyCharsに指定データがある場合,getによりkeyCharsの先頭要素を取得しています.またif文によりkeyCharsのリストがからの場合,リストをdictionaryから削除しています.
|
70
162
|
|
71
163
|
### 補足情報(FW/ツールのバージョンなど)
|
72
|
-
開発環境はEclipseです.
|
164
|
+
開発環境はEclipseです.
|
165
|
+
javadocのバージョンですが最新のものと思われますが確認方法がわかりません.
|
166
|
+
メインメソッドを追加しました.
|