2013-12-07 6 views
0

Я использую этот метод, чтобы проверить, действительно ли ссылка действительна, но когда я использую логическое ИЛИ, это не работает, но оно работает, когда я использую логический И это странно. Как вы думаете?Логический ИЛИ логический ИЛИ смущенный java?

public String verification() { 
    String lien = URL.getText().toString(); 
    if(titre.getText().toString().isEmpty()) 
    { 
     return "titreEmpty"; 
    } 
    else if (lien.isEmpty()) { 
     return "UrlEmpty"; 
    } else if (!lien.contains("http")) { 
     return "notALink"; 
    } else if (!lien.contains("skydrive") || !lien.contains("youtube")) { //the logical OR doesn't work 
     return "linkInvalid"; 
    } 

    return "bon"; 
+1

Так что сделал не работа? –

+0

Я думаю, вы читаете это неправильно. –

+0

Ваше первое решение было правильным, теперь оно неверно. Теперь вам требуется 'lien', чтобы оба содержали« skydrive »и« youtube ». –

ответ

1

Посмотрите на ваше состояние:

!lien.contains("skydrive") || !lien.contains("youtube") 

Что происходит в случае, когда lien не содержат skydrive?
Весь состояние оценивается в

true || whatever 

, которые будут оценены истина, независимо от того, будет содержать lienyoutube или нет (что представляет whatever).

То же самое касается youtube. Если lien не будет содержать youtube, условие должно быть оценено до true, потому что оно будет whatever || true.


Если вы хотите, чтобы написать условие, что будет говорить

if it is not true that line contains `skydrive` or line contains `youtube` 
    ^^^^^^^^^^^^^^ ( ^^^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^ ) 
if(  !   (   a     |   b   )) 

вы должны написать его как

if (  !   (line.contains("skydrive") || line.contains("youtube"))) 

или с помощью De Morgan's laws < !(a | b) ==>!a && !b как

if (    !line.contains("skydrive") && !line.contains("youtube") ) 

и здесь у вас есть небольшое доказательство закона Де Моргана, где 1 = true, 0 = false

a | b | !a | !b | a|b | !(a|b) | !a & !b 
--+---+----+----+-----+--------+--------- 
0 | 0 | 1 | 1 | 0 | 1 | 1 
0 | 1 | 1 | 0 | 1 | 0 | 0 
1 | 0 | 0 | 1 | 1 | 0 | 0 
1 | 1 | 0 | 0 | 1 | 0 | 0 

, который показывает, что результат каждого случая a и b одинакова для !(a|b) и !a & !b

+0

Спасибо, что забыл законы Де Моргана. если подумайте об этой строке 'if (! line.contains (" skydrive ") && line.contains (" youtube "))' неправильно, вы забыли скобки –

+0

@DanSnow Это правильно. Вся суть законов Де Моргана заключается в том, чтобы позволить нам отбрасывать скобки или вставлять в них выражение. – Pshemo

+0

, так что вы забыли второй «!» здесь '! line.contains (" skydrive ") && line.contains (" youtube ")' –

2

вы используете "!" так что это означает, что что-то не соответствует чему-то еще

Вы говорите об этой строке правильно?

else if (!lien.contains("skydrive") && !lien.contains("youtube")) 

простыми словами, и активируется, когда селезенка не содержит SkyDrive И YouTube, ИЛИ активируется, когда селезенка не содержит SkyDrive ИЛИ YouTube, который будет означать, что бы активировать все время,

вы только запутавшись из-за «!» : P

+0

да, это проблема, я просто хочу проверить, содержит ли залог skydrive ИЛИ youtube, но это не работает с логическим ИЛИ, но работает с логическим И, то есть проблема –

+0

, почему вы пытаетесь удалить «!»? ? код правильный, вам просто нужно понять, почему он работает таким образом: P – TomTsagk

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