2016-09-02 6 views
0

дается 2 целых и условия negative:Проверить две переменные Signum с условием

  • возвращение true если один находится ниже нуля, и один выше нуля и negative является false.
  • возвращение true если оба указаны ниже нуля и negative - true.
  • возвращение false в противном случае.

Тесты:

posNeg(1, -1, false) expected: true 
posNeg(-1, 1, false) expected: true 
posNeg(-4, -5, true) expected: true 
posNeg(-4, 5, true) expected: false 

Мое решение проблемы является:

public boolean posNeg(int a, int b, boolean negative) { 
    return ((((a>0) && (b<0)) || ((a<0) && (b>0))) || (((a<0) && (b<0)) &&(negative))); 
} 

Но это не так для случая

posNeg(-4, 5, true) expected: false | actual: true 

Я думаю, что мое решение сразу же после проверяя несколько раз.

Пожалуйста, дайте мне знать, где я ошибаюсь. Почему это решение неверно?

ответ

0

У вас есть три случая в отношениях друг с другом. Так как один из случаев «a отрицателен, а b положителен», он вернет true.

Вам нужно убедиться, что первые два случая возвращают true, если отрицательный - false.

Например, вместо

((a>0) && (b<0)) 

записи

(a > 0 && b < 0 && !negative) 
1

(a<0) && (b>0) является true для (-4, 5).

(X || true) || Y = true

Refactor состояние так:

return negative && a < 0 && b < 0 
     || !negative && (a < 0 && b > 0 || a > 0 && b < 0); 

или

if (negative) return a < 0 && b < 0; 
else return a < 0 && b > 0 || a > 0 && b < 0; 

или

return negative 
    ? a < 0 && b < 0 
    : a < 0 && b > 0 || a > 0 && b < 0; 
+0

Спасибо, Сергей. Это было полезно. –

+1

Или: Используйте фактический оператор 'if'. – Andreas

1

Прежде всего проверить, является ли

(a>0) && (b<0) || (a<0) && (b>0) 

, не глядя, если negative является true или false. Условия проверяются слева направо.

Это делает как

posNeg(-4, 5, true) 
posNeg(-4, 5, false) 

вычисляться true.

0

Вот короткое решение.

public boolean posNeg(int a, int b, boolean negative) { 
    return negative == a > 0 == b > 0; 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^