QA@IT

【Javascript初心者です】forとswitch文でFizzBuzzらしきものが出来ません・・・

4597 PV

1から100までで3か5か15で割り切れると、文章をプリントするという内容です。

しかし画面が真っ白になってしまいます。どこが間違っているのでしょうか?
ヘッダーで宣言もしています。

<script type="text/javascript">
var i;
for(i=1; i<100; i++){
    switch(i){
        case (i%3 == 0):
        document.write(i + "is Fizz.<br>");
        break;

        case (i%5 == 0):
        document.write(i + "is Buzz.<br>");
        break;

        case (i%15 == 0):
        document.write(i + "is FizzBuzz.<br>");
        break;
    }
}
</script>

回答

(個人的にこの switch の使い方は好みではありませんが)

case で true/false と評価される値を書いているので switch は true にする必要があります。

var i;
for(i=1; i<100; i++){
    switch(true){
        case (i%3 == 0):
            document.write(i + "is Fizz.<br>");
            break;

        case (i%5 == 0):
            document.write(i + "is Buzz.<br>");
            break;

        case (i%15 == 0):
            document.write(i + "is FizzBuzz.<br>");
            break;
    }
}

ただし、これだと 15 で割り切れる時に一番目の case にマッチしてしまうので、次のように順番を入れ替える必要があります。

var i;
for(i=1; i<100; i++){
    switch(true){
        case (i%15 == 0):
            document.write(i + "is FizzBuzz.<br>");
            break;

        case (i%3 == 0):
            document.write(i + "is Fizz.<br>");
            break;

        case (i%5 == 0):
            document.write(i + "is Buzz.<br>");
            break;
    }
}
編集 履歴 (0)
  • 回答ありがとうございます。まだわからないことがあります・・・
    追加で質問なのですが、具体的になぜこのswitch文の使い方が好きではないのでしょうか?
    また、caseで評価する式を書いているときはswitchが変数ではなぜいけないのでしょうか?
    -
  • 最初に覚えた言語が C 言語だからです。C 言語だと case のラベルに変数は書けないのでこの書き方には違和感があります。 -
  • switch が変数だとダメなわけではありません。
    case ラベルが true と評価されたときに中身を実行させるのであれば、switch には true と評価される値を書かなければならないだけです。
    -
  • つまり、僕の最初に提示したコードだと、switch(i)がfalseと認識されてしまったという事ですよね? -
  • いえ、switch(i) は i の値で 1 とか 2 とかです。
    一方 case の (i%3 == 0) などは true か false 評価されます。
    -

1から100までで3か5か15で割り切れると、文章をプリントするという内容です。

そういうことであれば、以下のようにしてはいかがですか? 質問にあったように、条件に合ったら break したい場合は、2 つ目以降の if を else if に代えてください。

var i;
for (i = 1; i < 100; i++) {
    if (i % 3 == 0) {
        document.write(i + "is Fizz.<br>");
    }

    if (i % 5 == 0) {
         document.write(i + "is Buzz.<br>");
    }

    if (i % 15 == 0) {
          document.write(i + "is FizzBuzz.<br>");
    }
}
編集 履歴 (1)
ウォッチ

この質問への回答やコメントをメールでお知らせします。