回答編集履歴
1
コメントを色々と追加しつつ、コードをリファクタリングしました
test
CHANGED
@@ -60,93 +60,147 @@
|
|
60
60
|
|
61
61
|
$(function () {
|
62
62
|
|
63
|
+
// jQueryでHTMLの要素を取得
|
64
|
+
|
65
|
+
var test = $('#test');
|
66
|
+
|
67
|
+
var log = $('#log');
|
68
|
+
|
69
|
+
|
70
|
+
|
71
|
+
// `#test`に表示されている値の基準値(最初は100)
|
72
|
+
|
63
|
-
var base = 10
|
73
|
+
var base = parseInt(test.val(), 10);
|
74
|
+
|
64
|
-
|
75
|
+
// 現在残っている中で一番最初に追加された値(元々の値から減っている可能性がある)
|
76
|
+
|
77
|
+
// 0の場合は、残っている値が無い状態
|
78
|
+
|
65
|
-
var
|
79
|
+
var topValue = 0;
|
80
|
+
|
81
|
+
// 追加された元々の値達を格納する配列
|
66
82
|
|
67
83
|
var originalValues = [];
|
68
84
|
|
69
|
-
|
85
|
+
|
70
|
-
|
86
|
+
|
71
|
-
|
87
|
+
// `#test`と`#log`の表示を更新する関数
|
72
|
-
|
73
|
-
|
74
|
-
|
88
|
+
|
75
|
-
function
|
89
|
+
function update() {
|
90
|
+
|
76
|
-
|
91
|
+
// `#log`の中身を一旦削除
|
92
|
+
|
93
|
+
log.empty()
|
94
|
+
|
95
|
+
// 残っている値の合計を計算する変数
|
96
|
+
|
77
|
-
var sum =
|
97
|
+
var sum = topValue;
|
98
|
+
|
78
|
-
|
99
|
+
// 残っている値が存在するなら、`#log`にそれらの情報を追加する
|
100
|
+
|
101
|
+
if (topValue !== 0) {
|
102
|
+
|
103
|
+
log.append($('<li>').text('追加された値: ' + originalValues[0] + ' (残っている値: ' + topValue + ')'));
|
104
|
+
|
79
|
-
for (var i =
|
105
|
+
for (var i = 1; i < originalValues.length; i++) {
|
106
|
+
|
80
|
-
|
107
|
+
log.append($('<li>').text('追加された値: ' + originalValues[i]));
|
108
|
+
|
109
|
+
// `#log`に追加しつつ残っている値の合計の計算も進める
|
110
|
+
|
81
|
-
sum +=
|
111
|
+
sum += originalValues[i];
|
82
|
-
|
112
|
+
|
83
|
-
}
|
113
|
+
}
|
114
|
+
|
84
|
-
|
115
|
+
}
|
116
|
+
|
117
|
+
// 残っている値の合計を基準値と足し合わせて表示
|
118
|
+
|
85
|
-
|
119
|
+
test.val(base + sum);
|
86
120
|
|
87
121
|
}
|
88
122
|
|
89
123
|
|
90
124
|
|
91
|
-
function update() {
|
92
|
-
|
93
|
-
log.empty()
|
94
|
-
|
95
|
-
for (var i = 0; i < values.length; i++) {
|
96
|
-
|
97
|
-
log.append($('<li>').html('追加された値: ' + originalValues[i] + ' (減らされた後の値: ' + values[i] + ')'));
|
98
|
-
|
99
|
-
}
|
100
|
-
|
101
|
-
|
125
|
+
// `#huyasu`をクリックした時
|
102
|
-
|
103
|
-
}
|
104
|
-
|
105
|
-
|
106
126
|
|
107
127
|
$('#huyasu').on('click', function () {
|
108
128
|
|
109
|
-
var rnd = Math.floor(Math.random() * 100);
|
129
|
+
var rnd = Math.floor(Math.random() * 100) + 1;
|
110
|
-
|
130
|
+
|
111
|
-
|
131
|
+
// 追加された値の配列に追加
|
112
132
|
|
113
133
|
originalValues.push(rnd);
|
114
134
|
|
135
|
+
// もし残っている値が無いなら、
|
136
|
+
|
137
|
+
// 一番最初に追加された値ということになるのでtopValueに値をセット
|
138
|
+
|
139
|
+
if (topValue === 0) {
|
140
|
+
|
141
|
+
topValue = rnd;
|
142
|
+
|
143
|
+
}
|
144
|
+
|
145
|
+
// `#test`と`#log`の表示を更新
|
146
|
+
|
115
147
|
update();
|
116
148
|
|
117
149
|
});
|
118
150
|
|
119
151
|
|
120
152
|
|
153
|
+
// `#herasu`をクリックした時
|
154
|
+
|
121
155
|
$('#herasu').on('click', function () {
|
122
156
|
|
123
|
-
var rnd = Math.floor(Math.random() * 100);
|
157
|
+
var rnd = Math.floor(Math.random() * 100) + 1;
|
124
|
-
|
125
|
-
|
158
|
+
|
126
|
-
|
127
|
-
do {
|
128
|
-
|
129
|
-
if (values.length === 1) break
|
130
|
-
|
131
|
-
|
159
|
+
// 予め残っている値を減らしておく
|
132
|
-
|
160
|
+
|
133
|
-
|
161
|
+
topValue -= rnd;
|
134
|
-
|
162
|
+
|
135
|
-
|
163
|
+
// ここで残っている値が0以下なら無くなったということなのでalertしていく
|
136
|
-
|
164
|
+
|
137
|
-
while (
|
165
|
+
while (topValue <= 0 && originalValues.length >= 1) {
|
166
|
+
|
167
|
+
// originalValues.shift()は配列の0番目の要素を取り出して削除し、その値を返すメソッド
|
138
168
|
|
139
169
|
alert(originalValues.shift() + "が0になりました");
|
140
170
|
|
171
|
+
// 追加された元々の値が無くなってしまったら、
|
172
|
+
|
173
|
+
// このループは成り立たないので、
|
174
|
+
|
175
|
+
// ループから抜ける
|
176
|
+
|
177
|
+
if (originalValues.length === 0) {
|
178
|
+
|
179
|
+
break;
|
180
|
+
|
141
|
-
}
|
181
|
+
}
|
142
|
-
|
182
|
+
|
143
|
-
|
183
|
+
// 次の残っている値を計算する
|
144
|
-
|
184
|
+
|
145
|
-
ale
|
185
|
+
topValue = originalValues[0] + topValue;
|
146
|
-
|
147
|
-
|
186
|
+
|
148
|
-
|
149
|
-
}
|
187
|
+
}
|
188
|
+
|
189
|
+
// ループを抜けたあとの残っている値が0未満だったら、
|
190
|
+
|
191
|
+
// 基準となる値を調節して、
|
192
|
+
|
193
|
+
// 残っている値が何も無い状態にする
|
194
|
+
|
195
|
+
if (topValue < 0) {
|
196
|
+
|
197
|
+
base += topValue;
|
198
|
+
|
199
|
+
topValue = 0;
|
200
|
+
|
201
|
+
}
|
202
|
+
|
203
|
+
// `#test`と`#log`の表示を更新
|
150
204
|
|
151
205
|
update();
|
152
206
|
|
@@ -160,4 +214,6 @@
|
|
160
214
|
|
161
215
|
</html>
|
162
216
|
|
217
|
+
|
218
|
+
|
163
219
|
```
|