我想知道如何检查向量中的元素是否不是类的实例。假设向量m中的元素存在于类中,则增加和。如果i不是类的实例,那么我们返回-1。这是我的代码:
public static int CountHighs(Vector m) {
int sum = 0;
for (int i = 0; i < m.size(); i++) {
try {
if (m.get(i) instanceof HighRights) {
sum += 1;
} else if ((!m.get(i) instanceof Highrights) || (!m.get(i) instanceof LowRights)) {
sum = -1;
}
} catch (NullPointerException E) {
System.out.println("Error");
System.exit(0);
return 0;
}
return sum;
}
}我用过接线员"!“这里对被访者有利。
!m.gets会导致错误。我想知道是否有一种方法来说明元素是否不是这个类的实例。
发布于 2016-05-14 16:46:30
在Java中,一元运算符(如!)比关系运算符(如instanceof)具有更高的优先级(详见官方教程 )。因此,Java首先尝试解释!m.get(i),但失败了,因为m.get(i)不返回布尔值。为了解决这个问题,您应该使用括号首先使instanceof评估:
else if (!((m.get(i) instanceof Highrights) || (m.get(i) instanceof LowRights))) {发布于 2016-05-14 16:44:39
只需将此(!m.get(i) instanceof Highrights)更改为此!(m.get(i) instanceof Highrights)即可。实际上,!是boolean值的运算符,但在这里,m.get(i)不返回boolean,而是返回对象,因此它不编译,因此需要将它放在父代之外,以获得测试x instanceof y的负值。
所以最后的测试是!(m.get(i) instanceof Highrights) || !(m.get(i) instanceof LowRights)
NB:,您的测试在else if中,这意味着以前的if失败了,所以您已经知道m.get(i) instanceof HighRights是false,所以您的测试将永远是true,所以我认为您的测试应该是else if (!(m.get(i) instanceof LowRights))
发布于 2016-05-14 16:56:28
只要做:
else if(!(m.get(i) instanceof LowRights))我还格式化了您的其余代码,并取出了不必要的检查:
else if(!(m.get(i) instanceof Highrights))括号将整个语句视为一个boolean,然后您可以用一个!否定这一点。此外,由于您使用的是else if,这意味着m.get(i)不能是HighRights的实例,因此没有必要进行检查,所以您的最终代码如下所示:
public static int CountHighs (Vector m) {
int sum=0;
for(int i=0; i<m.size();i++){
try{
if(m.get(i) instanceof HighRights){
sum+=1;
}
else if(!(m.get(i) instanceof LowRights)){
sum=-1;
}
catch(NullPointerException E){
System.out.println("Error");
System.exit(0);
return 0;
}
}
return sum;
}https://stackoverflow.com/questions/37229240
复制相似问题