2017-08-02 84 views
0

給定2個int值,如果其中一個爲負值且一個爲正值,則返回true。除非參數「negative」爲真,否則只有在兩者都爲負時才返回true。嵌套if語句在幾個測試中返回false

這裏是我的代碼:

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

你真的應該使用'&&'和'||'。在這種情況下,嵌套ifs是不必要的。 – 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

試試這個:

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'就像要求整數溢出的情況下:)無論如何,它可以被「簡化」更多與'返回負面? a <0 && b <0:a * b <0;'。 – Pshemo

+0

@Pshemo jajajaja – meda

+2

你運行大整數溢出的風險。 –

1

你可以簡化你的邏輯相當多,如果negative是真的,你要檢查aandb都小於零。否則,如果其中一個或另一個小於零(這是排他或xor),則您想要true。這可以做,就像,

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

這是正確的答案 –