问题描述
我正在尝试根据 2 个条件验证参数。 必须是字符串,不区分大小写。如果参数不等于“title”或“author”,它应该抛出一个错误。代码的第一部分似乎有效,但第二部分说它总是正确的,每次我都会出错。这是代码的一部分。
if(!"title".equalsIgnoreCase(property))
{
throw new IllegalNovelPropertyException("Bad Property");
}
if(!"author".equalsIgnoreCase(property))
{
throw new IllegalNovelPropertyException("Bad Property");
}
解决方法
如果代码有效,那就太好了。但是,您可能想写
if(!property.equalsIgnoreCase("title") && !property.equalsIgnoreCase("author")) {}
有两个变化:
首先,if(! )
语句组合成 if(! && ! )
。这样更简单,并且可以避免编写不必要的语句。
第二,if(!"title".equalsIgnoreCase(property))
改为
if (!property.equalsIgnoreCase("title"))
把.
左边的变量和比较的字符串写成equalsIgnoreCase()
的参数是比较常用的表示法;也许这是一个偏好问题而不是逻辑问题,尽管它也很容易成为实用性问题。查看它,或者只是将其更改为通用符号以确保安全。直觉上,它们看起来是一样的:
你的方式:如果(!变量==字符串)
常用方法:if(!string == variable)
*请注意,出于此逻辑的目的,
== = .equals()
:)
这很有趣,所以更清楚:
==
与 .equals()
还要注意的是
(== == .equals()) = false
:) 在 Java 中,
即==
,一个布尔比较器,不等于 .equals()
,一个利用布尔比较的字符串比较器。您可以使用 ==
来比较字符串,但 .equals() 更强大:正如您所经历的,它可以使用更高级的比较,例如 .equalsIgnoreCase()
。
有了这个背景,原来的逻辑就可以更简单了:
你的方式:if (!b == a){}
常用方法:if (!a == b){}
如果将其简化为这些语句,则两个符号看起来相等。
所有这些只是表明您可能想要重新排列语法;如果您仍然遇到错误,请告诉我们。