3

私はそれが初めてなので、codeacademys JavaScript チュートリアルを行っています。チュートリアルでは、次のことが求められます。

1 から 20 までの数字を出力します。
ルール:
- 3 で割り切れる数については、"Fizz" を出力します。
- 5 で割り切れる数の場合は、「Buzz」と出力します。
- 3 と 5 の両方で割り切れる数については、コンソールに「FizzBu​​zz」と出力します。
- それ以外の場合は、番号を印刷してください。

これが私のコードです:

for (i=1; i<=20; i++) {

if(i%3==0) {
    console.log("Fizz");
} 
if(i%5==0){
    console.log("Buzz");
}else if (i%5==0 && i%3==0) {
    console.log("fizzBuzz");
} else {
    console.log(i);
}

}

間違った数のアイテムを印刷しているというエラーが表示されますが、その理由を知っている人はいますか?

4

10 に答える 10

2

3 と 5 の両方のチェックを最初に行う必要があります。そうしないと、他の 2 つのステートメントがすでに真であり、別のログが生成されます。これで、FizzBu​​zz を 1 つのconsole.logステートメントで出力できます。

   for (i=1; i<=20; i++) {

      if (i%5==0 && i%3==0) {
          console.log("FizzBuzz");
      } else if(i%3==0) {
          console.log("Fizz");
      } else if(i%5==0){
          console.log("Buzz");
      } else {
          console.log(i);
      }

    }
于 2013-10-07T10:56:14.307 に答える
0

これで、正しい答えが得られました。

for(var i=1;i<=20;i++)
{

if(i%3 === 0 && i%5 === 0)
{
    console.log("FizzBuzz");
    }
else if(i%3 === 0)
{
    console.log("Fizz");
    }
    else if(i%5 === 0)
{
    console.log("Buzz");
    }
    else
    {
        console.log(i);
    }
}

結果は次のようになります。

1 2 フィズ 4 バズ フィズ 7 8 フィズ バズ 11 フィズ 13 14 フィズバズ 16 17 フィズ 19 バズ

于 2013-11-14T07:23:02.463 に答える
0
for (var i=1 ; i<=20 ; i++){
    if (i%3===0 && i%5!=0){
        console.log("Fizz");
    } else if (i%5===0 && i%3!=0){
        console.log("Buzz");
    } else if (i % 3 === 0 && i % 5 === 0 ){
        console.log("FizzBuzz");    
    } else {
        console.log (i);
    }
}
于 2015-08-23T23:19:19.947 に答える
0

こんにちは、¨=¨をチェックしてください

for (i = 1; i <= 20; i++) {
    if (i%3===0 && i%5===0) {
        console.log("FizzBuzz");
    } 
    else if (i%3===0) {
         console.log("Fizz");
    }
    else if (i%5===0) {
        console.log("Buzz");
    } 

    else {
        console.log(i);
    }
}
于 2014-01-21T04:17:15.217 に答える
0

最初の IF で、数値が 3 と 5 の両方で割り切れるかどうかを確認する必要があります。両方で割り切れる数値は、最初と 2 番目の IF ステートメントが実行される結果になるためです。

さらに、ルールでは、数値が両方で割り切れる場合に備えて「FizzBu​​zz」と書き出すように指示されており、現時点では「Buzz」のみを出力しています。

于 2013-10-07T10:55:01.923 に答える
0
var i=1;
while (i<21)
{    
    if(i%3!==0 && i%5!==0)
    {
        console.log(i);
    }
    if(i%3===0 && i%5===0 )
    {
        console.log("FizzBuzz");
    }
    else if(i%3===0)
    {
        console.log("Fizz");
    }
    else if(i%5===0)
    {
        console.log("Buzz");
    }   

    i++;
}
于 2016-06-27T08:21:50.917 に答える
0

自分で試してみましたか?実行すると、次の出力が得られるためです。

1
2
"Fizz"
3
4
"Buzz"
"Fizz"
6
7
8
"Fizz"
9
"Buzz"
11
"Fizz"
12
13
14
"Fizz"
"Buzz"
16
17
"Fizz"
18
19
"Buzz"

ご覧のとおり、印刷しても数字を印刷していて、Fizz実際FizzBuzzには 2 行ではなく 1 行で印刷することになっています。

前者の問題を修正するには、if/else 構造を確認する必要があります。の場合だけで、最初に別の if がありFizzます。その後、 もBuzz個別に処理し、一致するものがない場合は番号を出力します。したがって、すでに印刷されていFizzますが、まだ最後のelse. したがって、これら 2 つの個別の if ブロックを 1 つのブロックに結合する必要があります。

もう1つの問題は、console.log常に別の行を書き込むことです。FizzBuzzしたがって、すべての条件を確認する場合は、印刷する必要がありますFizzBuzz。また、最初にそれを確認する必要があります。そうしないBuzzと、印刷する機会がなく、条件が最初にヒットしますFizzBuzz

于 2013-10-07T10:57:57.537 に答える
0

手でロジックを見てみましょう。iがの場合1、最後のブロックのみが機能します。の場合、最初のブロックが機能しますi3の場合、2 番目のブロックが機能しますi。がの5場合、2 番目のブロックが機能し、3 番目のブロックにはチャンスがありません。i15

一般に、最も制限の厳しい条件を実行してから、最も制限の少ない条件を実行します。また、2 つのブロックが類似していない場合は、注意して確認する必要があります。4 つのブロックがあり、elseブロックは 1 つだけです。

于 2013-10-07T10:58:07.910 に答える
0

Javascript はわかりませんが、Python はある程度知っていて、同じ問題に遭遇しました。多分これが役立つかもしれません。誰かがこれをJavascriptに翻訳できると確信しています。

元の問題は次のとおりです 。1 から 20 までの数値をループします。数値が 3 で割り切れる場合は、Hip を出力します。その数が 7 で割り切れる場合は、「Hooray」と出力します。

同様の問題に対するpythonのコードは次のとおりです。

for numbers in range(1,21):
    if numbers % 3 !=0 and numbers % 7 != 0:
        print(numbers)
    if numbers % 3 == 0:
            print("Hip")
    if numbers % 7 == 0:
            print("Hooray")

出力は次のとおりです。

1 2 ヒップ 4 5 ヒップ 万歳 8 ヒップ 10 11 ヒップ 13 万歳 ヒップ 16 17 ヒップ 19 20

于 2017-10-05T22:02:17.113 に答える