2017-08-02 4 views
0

2つのint値が指定されている場合、1つが負で1が正の場合はtrueを返します。パラメータ "negative"がtrueの場合を除き、両方が負の場合にのみtrueを返します。私は私のミスがどこかありふれた風景の中に隠れている知っているいくつかのテストでfalseを返す入れ子のif文

public boolean posNeg(int a, int b, boolean negative) { 

if (negative) 
    if (a < 0 && b < 0) 
    return true; 


if (!negative) 
    if (a > 0) 
    if (b < 0) 
     return true; 
     else if (a < 0) 
     if (b > 0) 
      return true; 


    return false; 

the bottom-most "red" result is confusing me. It should be returning true as the others are.}

は、ここに私のコードです。それを指摘する気に?

+5

のように行うことができます。コードを正しくインデントし、条件文に中括弧を使用することから始めます。あなたがそうするならば、答えはかなり明確になるでしょう。 – mikea

+1

最初は中括弧で書いていましたが、問題を解決するのに役立つと思って削除しました。中括弧に再入力しようとすると混乱します。私はちょうどやり直すかもしれない、私がコードを書いている間、自分自身がエラーをやっていくのを捕まえるだろう。 – David

+2

あなたは本当に '&&'と '||'を使うべきです。このような場合、ネストする必要はありません。 – Carcigenicate

答えて

2

ロジックのインデントが正しくありません。これを試してみてください:

public boolean posNeg(int a, int b, boolean negative) { 

    if (negative) { 
     if (a < 0 && b < 0) { 
      return true; 
     } 
    } 
    else { 
     if (a > 0) { 
      if (b < 0) { 
       return true; 
      } 
     } 
     else if (a < 0) { 
      if (b > 0) { 
       return true; 
      } 
     } 
    } 
    return false; 
} 
+0

それはそうしました。私は中括弧に感謝します。 – David

0

このお試しください:negativeがtrueの場合は、aかどうかを確認したい、あなたのロジックかなり簡素化することができ

if(negative){ 
     return (a < 0 && b < 0) 
    }else{ 
     return (a * b < 0) 
    } 

boolean result = negative ? (a < 0 && b < 0) : (a * b < 0); 

enter image description here

+1

'(a * b)<0'は整数オーバーフローの場合を求めるようなものです:)とにかく、' return negative? a <0&b <0:a * b <0; '。 – Pshemo

+0

@Pshemo jajajaja – meda

+2

大きな整数でオーバーフローする危険があります。 –

1

およびbは両方ともゼロより小さい。そうでない場合はtrueのどちらか一方が0より小さい場合(または、またはxor)が必要です。それは、

if (negative) { 
    return a < 0 && b < 0; 
} 
return (a < 0)^(b < 0); 
+0

これは正解です –

関連する問題