3

こんにちは仲間のStackOverflowers。私は今脳のおならを持っています、そして私はこれを理解することができないようです。

私は次のコードを持っています

if ((n % 3 === 0 || n % 5 === 0) &&( n % 3 !== 0 && n % 5 !== 0))
    {
        return true;
}
else {
    return false;
}

基本的に、数が3の倍数であるかどうかをテストする必要があります|| 5ですが、両方の倍数ではありません。

ただし、入力した数値を入力すると(3 || 5 ||両方の倍数であるかどうかに関係なく)、テストは常に失敗します。これは1つのステートメントで実行できると思いました。

ただし、このコードは正常に機能します。

if (n % 3 === 0 || n % 5 === 0)
{
    if( n % 3 === 0 && n % 5 === 0)
    {
        return false;
    }
    else {
       return true;
    }
}
else {
    return false;
}

しかし、私は最初のテストで何が欠けているのか疑問に思っています。私はすべてのテストを1つのようにしたいと思いますが、私が言ったように、私は脳のおならを持っていて、私が欠けているものを理解することができません。

4

7 に答える 7

9

代わりに、XOR演算子を使用できます

return  (n % 3 === 0 ^ n % 5 === 0);
于 2012-04-04T14:37:02.643 に答える
7

3と5の両方で割り切れる場合は、15で割り切れます。

次の条件を試してください

if ((n % 3 === 0 || n % 5 === 0) && ( n % 15 !== 0))
于 2012-04-04T14:36:01.120 に答える
3

変化する

if ((n % 3 === 0 || n % 5 === 0) &&( n % 3 !== 0 && n % 5 !== 0))

if ((n % 3 === 0 || n % 5 === 0) && !(n % 3 === 0 && n % 5 === 0))

ロジックの最初の部分は、問題の数が3または5の倍数であるかどうかを判断することですが、2番目の部分は、そのうちの1つだけであるかどうかについてである必要があります。だから...私は両方がそれに一致するかどうかを確認するために2番目の部分を変更しました、そしてそれから私はそれをしませんでした。

于 2012-04-04T14:37:08.410 に答える
2

そのはず:if ((n % 3 === 0 || n % 5 === 0) &&( n % 3 !== 0 || n % 5 !== 0))

于 2012-04-04T14:35:22.377 に答える
1
return (n % 3 === 0  && !(n % 5 === 0)) || (n % 5 === 0  && !(n % 3 === 0));

(未テスト)

于 2012-04-04T14:35:40.177 に答える
1

2番目のチェックが間違っています:

if ((n % 3 === 0 || n % 5 === 0) &&**( n % 3 !== 0 && n % 5 !== 0)**)

次のように変更します。

(! (n%3 === 0 && n % 5 === 0 ) )

于 2012-04-04T14:35:40.613 に答える
1

XORこれは、 JavaScriptで条件文を使用した実装の短いバージョンです。

if((n % 3 === 0)? (n % 5 !== 0) : (n % 5 === 0)) {
  ...
}

または、この方法で比較して、ブール値として評価されたときに2つの条件が異なる値を返すかどうかを確認することもできます(1つはtrueで、もう1つはfalseまたはその逆)。

if( (n % 3 === 0) !==  (n % 5 === 0)) {
  ...
}

だからこのコードは本当に短く書くことができます

于 2012-04-04T14:37:17.353 に答える