回答編集履歴

5

回答が尋常じゃなく長くなってしまったので、整理

2017/09/07 15:59

投稿

LouiS0616
LouiS0616

スコア35660

test CHANGED
@@ -1,10 +1,214 @@
1
- の回答
1
+ 質問への回答
2
-
2
+
3
- ---
3
+ ---
4
+
4
-
5
+ 動作のイメージが本当に仕様どおりかわかりませんが。こんな感じですかね。
6
+
7
+ ```Java
8
+
9
+ List<Integer> playLog = new ArrayList<>();
10
+
11
+ for(int i = 0; i < stop.size(); i++) {
12
+
13
+ int nowStart = list.get(1).get(i);
14
+
15
+ int nowStop = list.get(0).get(i);
16
+
17
+
18
+
19
+ for(int j = 0; j < nowStart; j++) {
20
+
21
+ playLog.add(1);
22
+
23
+ }
24
+
25
+ for(int j = 0; j < nowStop; j++) {
26
+
27
+ playLog.add(0);
28
+
29
+ }
30
+
31
+ }
32
+
33
+
34
+
35
+ System.out.println(playLog);
36
+
37
+ ```
38
+
39
+
40
+
41
+ 質問自体への回答は以上です。以降の回答はちょっと脱線気味です。
42
+
43
+
44
+
45
+ 仕様を正しく伝えるために
46
+
47
+ ---
48
+
49
+ 口下手なことをしきりに気にしておられるようですが...
50
+
51
+ なかなか上手く説明できないのなら、『語るコード』を書くべきなのです。
52
+
53
+ - **適切な変数名を付ける**
54
+
55
+
56
+
57
+ 基本的に変数名は横文字になるかと思いますが、可能な限り、その性質を表す言葉にしましょう。
58
+
59
+ ex) `stop` → `pauseDurationSecs`
60
+
61
+ 0. stopより、pauseの方が一時停止の意味合いが強い(多分)。
62
+
63
+ 0. 継続時間であることを明示するために、Durationを付ける。
64
+
5
- みませんちょっ外した回答かもしれません
65
+ 0. 単位を明確にるためにSec付ける
66
+
6
-
67
+ 0. リストであることを明示するために、Listと付けるか複数形にする。
68
+
69
+ 0. 変数であることを明示するために、camelCaseを用いる。
70
+
71
+
72
+
73
+ `play`も`list`も、ネーミングとしてはアウトです。
74
+
75
+
76
+
77
+ ---
78
+
79
+ - **ネストをはっきりさせる**
80
+
7
- 次のように設計ればよいのでは?
81
+ 具体的には、次の部分で
82
+
83
+ > ```Java
84
+
85
+ > //リスト数分繰り返し
86
+
87
+ > for(int i = 0; i < stop.size(); ++i ){
88
+
89
+ > //下記からどのように記載すればよいか分かりません。
90
+
91
+
92
+
93
+ > }
94
+
95
+ > }
96
+
97
+ > ```
98
+
99
+
100
+
101
+ for文のインデントが深くなっているので、外側のループについての質問かと思いました。
102
+
103
+
104
+
105
+ ---
106
+
107
+ - **具体的な実行例を書く**
108
+
109
+
110
+
111
+ イメージする実行例を書きましょう。
112
+
113
+ 書いていく中でイメージがはっきりしてきて、自己解決することも期待できます。
114
+
115
+
116
+
117
+ ---
118
+
119
+ - **宣言部は略さない**
120
+
121
+
122
+
123
+ 変数の型が明確になります。
124
+
125
+
126
+
127
+ ---
128
+
129
+ 以上、余計なお世話かもしれませんが... 作文力は一朝一夕で身につくものではありません。
130
+
131
+ ですから、これらのように別のアプローチで伝えるようにするといいかもしれません。
132
+
133
+
134
+
135
+ もし出力の形式に拘るなら
136
+
137
+ ---
138
+
139
+ 例えば以下のようにして、出力の形式をコントロールできます。
140
+
141
+ ```Java
142
+
143
+ // 任意の型Tに関する、List<T>を引数に取る
144
+
145
+ public static <T> void printList(List<T> list) {
146
+
147
+ // 返り値用の文字列を宣言・初期化
148
+
149
+ String buffer = "";
150
+
151
+
152
+
153
+ // 引数listに属するすべての要素を、Tという型のelemとして扱う
154
+
155
+ for(T elem: list) {
156
+
157
+ // 返り値用の文字列に継ぎ足していく
158
+
159
+ buffer += elem + ", ";
160
+
161
+ }
162
+
163
+ // このままだと最後に無駄な", "が付いてしまうので、二文字分尻から削る
164
+
165
+ buffer = buffer.substring(0, buffer.length() - 2);
166
+
167
+ System.out.println(buffer);
168
+
169
+ }
170
+
171
+ ```
172
+
173
+
174
+
175
+ **『Tってなに?』**
176
+
177
+ → ジェネリクスについて調べてみてください。
178
+
179
+ **『for文なんか変じゃない?』**
180
+
181
+ → 拡張for文について調べてみてください。
182
+
183
+
184
+
185
+ ---
186
+
187
+ ただし、上記の例ではList標準の出力形式とほぼ同じですので、次のようにも書けます。
188
+
189
+ ```Java
190
+
191
+ public static <T> void printList(List<T> list) {
192
+
193
+ String buffer = list.toString();
194
+
195
+ System.out.println(buffer.substring(1, buffer.length() - 1));
196
+
197
+ }
198
+
199
+ ```
200
+
201
+
202
+
203
+ 今後拡張/保守しやすくするには
204
+
205
+ ---
206
+
207
+ 二次元配列は何かとバグを生みやすいです。
208
+
209
+ クラスをご自身で定義し、そのリストを用いた方が良いでしょう。
210
+
211
+ **ただし下記の例は、私が勘違いした仕様に基づいています。直接的な参考にはなりません。**
8
212
 
9
213
  ```Java
10
214
 
@@ -89,207 +293,3 @@
89
293
  ```
90
294
 
91
295
 
92
-
93
- 追記
94
-
95
- ---
96
-
97
- 仕様がようやくわかってきたので追記します。こんな感じですかね。
98
-
99
- ```Java
100
-
101
- List<Integer> playLog = new ArrayList<>();
102
-
103
- for(int i = 0; i < stop.size(); i++) {
104
-
105
- int nowStart = list.get(1).get(i);
106
-
107
- int nowStop = list.get(0).get(i);
108
-
109
-
110
-
111
- for(int j = 0; j < nowStart; j++) {
112
-
113
- playLog.add(1);
114
-
115
- }
116
-
117
- for(int j = 0; j < nowStop; j++) {
118
-
119
- playLog.add(0);
120
-
121
- }
122
-
123
- }
124
-
125
-
126
-
127
- if(出力をカスタマイズしたい) {
128
-
129
- printList(playLog);
130
-
131
- }
132
-
133
- else {
134
-
135
- System.out.println(playLog);
136
-
137
- }
138
-
139
- ```
140
-
141
-
142
-
143
- ```Java
144
-
145
- // 任意の型Tに関する、List<T>を引数に取る
146
-
147
- public static <T> void printList(List<T> list) {
148
-
149
- // 返り値用の文字列を宣言・初期化
150
-
151
- String buffer = "";
152
-
153
-
154
-
155
- // 引数listに属するすべての要素を、Tという型のelemとして扱う
156
-
157
- for(T elem: list) {
158
-
159
- // 返り値用の文字列に継ぎ足していく
160
-
161
- buffer += elem + ", ";
162
-
163
- }
164
-
165
- // このままだと最後に無駄な", "が付いてしまうので、二文字分尻から削る
166
-
167
- buffer = buffer.substring(0, buffer.length() - 2);
168
-
169
- System.out.println(buffer);
170
-
171
- }
172
-
173
- ```
174
-
175
-
176
-
177
- **『Tってなに?』**
178
-
179
- → ジェネリクスについて調べてみてください。
180
-
181
- **『for文なんか変じゃない?』**
182
-
183
- → 拡張for文について調べてみてください。
184
-
185
-
186
-
187
- ---
188
-
189
- **よく考えたら、次のコードで充分でした。**
190
-
191
- ```Java
192
-
193
- public static <T> void printList(List<T> list) {
194
-
195
- String buffer = list.toString();
196
-
197
- System.out.println(buffer.substring(1, buffer.length() - 1));
198
-
199
- }
200
-
201
- ```
202
-
203
-
204
-
205
- 難しく考えすぎた。
206
-
207
-
208
-
209
- 蛇足
210
-
211
- ---
212
-
213
- 口下手なことをしきりに気にしておられるようですが...
214
-
215
- なかなか上手く説明できないのなら、『語るコード』を書くべきなのです。
216
-
217
- - **適切な変数名を付ける**
218
-
219
-
220
-
221
- 基本的に変数名は横文字になるかと思いますが、可能な限り、その性質を表す言葉にしましょう。
222
-
223
- ex) `stop` → `pauseDurationSecs`
224
-
225
- 0. stopより、pauseの方が一時停止の意味合いが強い(多分)。
226
-
227
- 0. 継続時間であることを明示するために、Durationを付ける。
228
-
229
- 0. 単位を明確にするために、Secと付ける。
230
-
231
- 0. リストであることを明示するために、Listと付けるか複数形にする。
232
-
233
- 0. 変数であることを明示するために、camelCaseを用いる。
234
-
235
-
236
-
237
- `play`も`list`も、ネーミングとしてはアウトです。
238
-
239
-
240
-
241
- ---
242
-
243
- - **ネストをはっきりさせる**
244
-
245
- 具体的には、次の部分です。
246
-
247
- > ```Java
248
-
249
- > //リスト数分繰り返し
250
-
251
- > for(int i = 0; i < stop.size(); ++i ){
252
-
253
- > //下記からどのように記載すればよいか分かりません。
254
-
255
-
256
-
257
- > }
258
-
259
- > }
260
-
261
- > ```
262
-
263
-
264
-
265
- for文のインデントが深くなっているので、外側のループについての質問かと思いました。
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
- ---
292
-
293
- 以上、余計なお世話かもしれませんが... 作文力は一朝一夕で身につくものではありません。
294
-
295
- ですから、これらのように別のアプローチで伝えるようにするといいかもしれません。

4

無駄なコードの修正

2017/09/07 15:59

投稿

LouiS0616
LouiS0616

スコア35660

test CHANGED
@@ -184,6 +184,28 @@
184
184
 
185
185
 
186
186
 
187
+ ---
188
+
189
+ **よく考えたら、次のコードで充分でした。**
190
+
191
+ ```Java
192
+
193
+ public static <T> void printList(List<T> list) {
194
+
195
+ String buffer = list.toString();
196
+
197
+ System.out.println(buffer.substring(1, buffer.length() - 1));
198
+
199
+ }
200
+
201
+ ```
202
+
203
+
204
+
205
+ 難しく考えすぎた。
206
+
207
+
208
+
187
209
  蛇足
188
210
 
189
211
  ---

3

追記

2017/09/07 15:30

投稿

LouiS0616
LouiS0616

スコア35660

test CHANGED
@@ -124,7 +124,17 @@
124
124
 
125
125
 
126
126
 
127
+ if(出力をカスタマイズしたい) {
128
+
127
- printList(playLog);
129
+ printList(playLog);
130
+
131
+ }
132
+
133
+ else {
134
+
135
+ System.out.println(playLog);
136
+
137
+ }
128
138
 
129
139
  ```
130
140
 

2

追記

2017/09/07 15:25

投稿

LouiS0616
LouiS0616

スコア35660

test CHANGED
@@ -132,16 +132,28 @@
132
132
 
133
133
  ```Java
134
134
 
135
+ // 任意の型Tに関する、List<T>を引数に取る
136
+
135
137
  public static <T> void printList(List<T> list) {
136
138
 
139
+ // 返り値用の文字列を宣言・初期化
140
+
137
141
  String buffer = "";
138
142
 
143
+
144
+
145
+ // 引数listに属するすべての要素を、Tという型のelemとして扱う
146
+
139
147
  for(T elem: list) {
140
148
 
149
+ // 返り値用の文字列に継ぎ足していく
150
+
141
151
  buffer += elem + ", ";
142
152
 
143
153
  }
144
154
 
155
+ // このままだと最後に無駄な", "が付いてしまうので、二文字分尻から削る
156
+
145
157
  buffer = buffer.substring(0, buffer.length() - 2);
146
158
 
147
159
  System.out.println(buffer);
@@ -152,6 +164,16 @@
152
164
 
153
165
 
154
166
 
167
+ **『Tってなに?』**
168
+
169
+ → ジェネリクスについて調べてみてください。
170
+
171
+ **『for文なんか変じゃない?』**
172
+
173
+ → 拡張for文について調べてみてください。
174
+
175
+
176
+
155
177
  蛇足
156
178
 
157
179
  ---

1

追記

2017/09/07 15:19

投稿

LouiS0616
LouiS0616

スコア35660

test CHANGED
@@ -1,3 +1,7 @@
1
+ 元の回答
2
+
3
+ ---
4
+
1
5
  すみません、ちょっと外した回答かもしれません。
2
6
 
3
7
  次のように設計すればよいのでは?
@@ -83,3 +87,155 @@
83
87
  }
84
88
 
85
89
  ```
90
+
91
+
92
+
93
+ 追記
94
+
95
+ ---
96
+
97
+ 仕様がようやくわかってきたので追記します。こんな感じですかね。
98
+
99
+ ```Java
100
+
101
+ List<Integer> playLog = new ArrayList<>();
102
+
103
+ for(int i = 0; i < stop.size(); i++) {
104
+
105
+ int nowStart = list.get(1).get(i);
106
+
107
+ int nowStop = list.get(0).get(i);
108
+
109
+
110
+
111
+ for(int j = 0; j < nowStart; j++) {
112
+
113
+ playLog.add(1);
114
+
115
+ }
116
+
117
+ for(int j = 0; j < nowStop; j++) {
118
+
119
+ playLog.add(0);
120
+
121
+ }
122
+
123
+ }
124
+
125
+
126
+
127
+ printList(playLog);
128
+
129
+ ```
130
+
131
+
132
+
133
+ ```Java
134
+
135
+ public static <T> void printList(List<T> list) {
136
+
137
+ String buffer = "";
138
+
139
+ for(T elem: list) {
140
+
141
+ buffer += elem + ", ";
142
+
143
+ }
144
+
145
+ buffer = buffer.substring(0, buffer.length() - 2);
146
+
147
+ System.out.println(buffer);
148
+
149
+ }
150
+
151
+ ```
152
+
153
+
154
+
155
+ 蛇足
156
+
157
+ ---
158
+
159
+ 口下手なことをしきりに気にしておられるようですが...
160
+
161
+ なかなか上手く説明できないのなら、『語るコード』を書くべきなのです。
162
+
163
+ - **適切な変数名を付ける**
164
+
165
+
166
+
167
+ 基本的に変数名は横文字になるかと思いますが、可能な限り、その性質を表す言葉にしましょう。
168
+
169
+ ex) `stop` → `pauseDurationSecs`
170
+
171
+ 0. stopより、pauseの方が一時停止の意味合いが強い(多分)。
172
+
173
+ 0. 継続時間であることを明示するために、Durationを付ける。
174
+
175
+ 0. 単位を明確にするために、Secと付ける。
176
+
177
+ 0. リストであることを明示するために、Listと付けるか複数形にする。
178
+
179
+ 0. 変数であることを明示するために、camelCaseを用いる。
180
+
181
+
182
+
183
+ `play`も`list`も、ネーミングとしてはアウトです。
184
+
185
+
186
+
187
+ ---
188
+
189
+ - **ネストをはっきりさせる**
190
+
191
+ 具体的には、次の部分です。
192
+
193
+ > ```Java
194
+
195
+ > //リスト数分繰り返し
196
+
197
+ > for(int i = 0; i < stop.size(); ++i ){
198
+
199
+ > //下記からどのように記載すればよいか分かりません。
200
+
201
+
202
+
203
+ > }
204
+
205
+ > }
206
+
207
+ > ```
208
+
209
+
210
+
211
+ for文のインデントが深くなっているので、外側のループについての質問かと思いました。
212
+
213
+
214
+
215
+ ---
216
+
217
+ - **具体的な実行例を書く**
218
+
219
+
220
+
221
+ イメージする実行例を書きましょう。
222
+
223
+ 書いていく中でイメージがはっきりしてきて、自己解決することも期待できます。
224
+
225
+
226
+
227
+ ---
228
+
229
+ - **宣言部は略さない**
230
+
231
+
232
+
233
+ 変数の型が明確になります。
234
+
235
+
236
+
237
+ ---
238
+
239
+ 以上、余計なお世話かもしれませんが... 作文力は一朝一夕で身につくものではありません。
240
+
241
+ ですから、これらのように別のアプローチで伝えるようにするといいかもしれません。