逻辑OR和逻辑OR被java混淆了吗?

时间:2013-12-07 16:01:35

标签: java android logical-operators

我使用此方法来检查链接是否有效,但是当我使用逻辑OR时它不起作用但是当我使用逻辑AND它时它很有效。你觉得怎么样?

   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";

2 个答案:

答案 0 :(得分:2)

你使用的是“!”这意味着如果某些东西不等于其他东西

你正在谈论这条线吗?

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

用简单的单词,当留置权不包含skydrive和youtube时,AND激活, 当留置权不包含skydrive或youtube时,或者激活,这意味着它会一直激活

你只是因为“!”而感到困惑:P

答案 1 :(得分:1)

看看你的情况:

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

如果lien不包含skydrive,会发生什么情况? 整个条件评估为

true || whatever

将被评估为true,无论lien是否包含youtube(代表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 = true0 = 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

显示ab的每个案例的结果与!(a|b)!a & !b相同