2016-06-18 3 views
0

このif文で何が問題なのか全くわかりません。lon = -3とlat = 7という値を送ったときにfalseを返すべきですが、そうではありません。このif文で何が問題になっていますか?

if (b < 0 && ((lon > 8 && lon < 0) || (lat > 8 && lat < 0))) 
    { 

    return false; 
    } 
    else 
    { 
    return true ; 
    } 
+0

bの値は? – Peter4499

+3

'(lon> 8 && lon <0)'と '(lat> 8 && lat <0)節は意味をなさない...つまり、決して' true'と評価されることはありません。 'lon'と' lat'は同時に8より大きく0未満である可能性がありますか? –

+2

@AlexandreLucchesi回答が投稿されているはずです。なぜなら、 "これはif文で間違っています*" –

答えて

-1

私があなたの声明を正しく読んでいるなら、決して偽になることはありません。虚偽のlonを得るためには、私は0より小さくなければならず、8よりも多くなければなりません...それは不可能です。 latと同じ場合。各値を分解

+0

欠陥のあるロジックのために彼は決して真実にはなりません。 – Li357

+0

whoot ...私の正解が下落している理由を私に説明することはできますか? – DXTR66

+0

私はすでにそれについて説明しました。あなたは、「決して偽になることはありません。あなたは答えが間違っている。 ANDの片側がfalseに評価されると、ステートメントはfalseに評価されます。 – Li357

1

...

int lon = -3; 
int lat = 7; 

    if (b < 0 && // i don't know b value 
      ((-3 > 8 && //false 
      -3 < 0)  //true 
    || (7 > 8 && //false 
    7 < 0 //false 
    ))) 
    { 

    return false; 
    } 
    else 
    { 
    return true ; 
    } 

それ= INTの経度をもたらす-3。 int lat = 7;

if (b < 0 && // i don't know b value 
      (false || false)) 
    { 

    return false; 
    } 
    else 
    { 
    return true ; 
    } 

、最終的には次のとおりです。

if (false) 
    { 

    return false; 
    } 
    else 
    { 
    return true ; 
    } 

それはtrueを返します!

1

この論理にはこのifの記述には瑕疵がありますが、ここではまだ学習するべきことがあります。代わりにif声明を評価し、その後trueまたはfalseのいずれかを返す、あなたは少しそれをクリーンアップし、同じような何か行うことができます:どのように不平等オペレーターの仕事の、おそらくあなたの理解が、バック論理エラーに

return b < 0 && ((lon > 8 && lon < 0) || (lat > 8 && lat < 0)) 

を。 lon > 0 && lon < 8のように、経度が0より大きく8より小さいと読むと、より意味をなさなくなります

関連する問題