回答編集履歴
3
加筆
answer
CHANGED
@@ -33,13 +33,13 @@
|
|
33
33
|
問題には要件として示されていませんので、「書かないと駄目」ということはありませんが、
|
34
34
|
ベン図を見ても分かるように、**最も多くの条件を有した領域から消去法で if else を書く手法**に過ぎません(重なっている部分を先に処理したほうが、あとで切り分けし直さなくて済むため)。
|
35
35
|
|
36
|
-
別段、以下のように、**文字列の結合処理
|
36
|
+
別段、以下のように、**文字列の結合処理に着目した処理**も正答です。
|
37
37
|
```javascrit
|
38
38
|
for(var i = 1; i <= 100; i++ ){
|
39
39
|
var rslt = "";
|
40
40
|
if (i % 3 ===0) rslt = "Fizz";
|
41
41
|
if (i % 5 ===0) rslt += "Buzz"
|
42
|
-
if (rslt === "") rslt = i;
|
42
|
+
if (rslt === "") rslt += i; // その数字の代わりに表示. 数値でなく数字と示されている
|
43
43
|
console.log( rslt );
|
44
44
|
}
|
45
45
|
```
|
2
追記
answer
CHANGED
@@ -31,7 +31,7 @@
|
|
31
31
|
> 3の倍数「且つ」5の倍数の "&&" は、if文の中で先頭に書かないとダメなのでしょうか?
|
32
32
|
|
33
33
|
問題には要件として示されていませんので、「書かないと駄目」ということはありませんが、
|
34
|
-
ベン図を見ても分かるように、**最も多くの条件を有した領域から消去法で if else を書く手法**に過ぎません。
|
34
|
+
ベン図を見ても分かるように、**最も多くの条件を有した領域から消去法で if else を書く手法**に過ぎません(重なっている部分を先に処理したほうが、あとで切り分けし直さなくて済むため)。
|
35
35
|
|
36
36
|
別段、以下のように、**文字列の結合処理 or 数値取得に着目した処理**も正答です。
|
37
37
|
```javascrit
|
1
追記
answer
CHANGED
@@ -1,3 +1,54 @@
|
|
1
|
+
追記)
|
2
|
+
FizzBuzz 問題は、様々な処理を訓練するものであり、「1つの回答例だけが正解」というものではありません。
|
3
|
+
ただ、問題文から「[ベン図](https://ja.wikipedia.org/wiki/%E3%83%99%E3%83%B3%E5%9B%B3)を想像できる」だけの知識があることが望ましい題材です。
|
4
|
+
|
5
|
+
1. 1から100 の数 という矩形のグループ ... **反復処理**(for, while)のブロックで表現
|
6
|
+
2. 3で割り切れる という円(Fizz)のグループ ... if 文などで切り分ける
|
7
|
+
3. 5で割り切れる という円(Buzz)のグループ ... 同上
|
8
|
+
4. 2.3. の重なったグループ ... 同上
|
9
|
+
|
10
|
+
ご質問(疑問2)で示されるコードは正しく切り分けができていませんので、[if文](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Statements/if...else)を再確認する必要があります。
|
11
|
+
|
12
|
+
* ``if(条件a) { 処理A }`` .. モシ、「条件aが真」ナラ、「処理A」ヲジッコウ
|
13
|
+
* ``else if(条件b) { 処理B }`` .. ソウジャナク、「条件bが真」ナラ、「処理B」ヲジッコウ
|
14
|
+
* ``else { 処理C }`` .. ソウジャナイナラ、「処理C」ヲジッコウ(条件aも条件bも共に偽のとき)
|
15
|
+
|
16
|
+
```javascrit
|
17
|
+
for(var i = 1; i <= 100; i++ ){
|
18
|
+
//console.log(i); ... 割り切れるかどうかに関わらず、出力してしまっている
|
19
|
+
if(i % 3 ===0 && i % 5===0){
|
20
|
+
console.log("FizzBuzz");
|
21
|
+
} else if (i % 5 ===0){
|
22
|
+
console.log("Buzz");
|
23
|
+
} else if (i % 3 ===0) {
|
24
|
+
console.log("Fizz");
|
25
|
+
} else {
|
26
|
+
console.log( i )
|
27
|
+
}
|
28
|
+
}
|
29
|
+
```
|
30
|
+
|
31
|
+
> 3の倍数「且つ」5の倍数の "&&" は、if文の中で先頭に書かないとダメなのでしょうか?
|
32
|
+
|
33
|
+
問題には要件として示されていませんので、「書かないと駄目」ということはありませんが、
|
34
|
+
ベン図を見ても分かるように、**最も多くの条件を有した領域から消去法で if else を書く手法**に過ぎません。
|
35
|
+
|
36
|
+
別段、以下のように、**文字列の結合処理 or 数値取得に着目した処理**も正答です。
|
37
|
+
```javascrit
|
38
|
+
for(var i = 1; i <= 100; i++ ){
|
39
|
+
var rslt = "";
|
40
|
+
if (i % 3 ===0) rslt = "Fizz";
|
41
|
+
if (i % 5 ===0) rslt += "Buzz"
|
42
|
+
if (rslt === "") rslt = i;
|
43
|
+
console.log( rslt );
|
44
|
+
}
|
45
|
+
```
|
46
|
+
|
47
|
+
※柔軟な考え方で様々な処理法がある問題ですので、「他人のコードを読む」、「他人にコードを読ませる」といった訓練に使われます。
|
48
|
+
(追記ここまで
|
49
|
+
|
50
|
+
----
|
51
|
+
|
1
52
|
A. 1
|
2
53
|
|
3
54
|
[if文](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Statements/if...else)でelse を使っているからです。
|