我使用此方法来检查链接是否有效,但是当我使用逻辑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";
答案 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 = 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
相同