teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

1

メインメソッドの記載.

2019/05/24 23:39

投稿

hinanogi
hinanogi

スコア18

title CHANGED
@@ -1,1 +1,1 @@
1
- Eclipseでのjavaのソースコードでメソッドの実装が上手くいかない
1
+ しりとりアプリでのメソッドの実装
body CHANGED
@@ -1,18 +1,18 @@
1
1
  ### 前提・実現したいこと
2
2
  しりとりをおこなうアプリをつくっています.その際のプレイヤークラスに関するメソッドgetHandです.
3
- javadocによると
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
+ メインメソッドを追加しました.