我想知道如何检查向量中的元素是否不是类的实例。
场景是如果向量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
会导致错误。我想知道是否有一种说明元素是否不是这个类的实例的方法。
答案 0 :(得分:2)
一元运算符(例如!
)的优先级高于Java中的关系运算符(例如instanceof
)(有关详细信息,请参阅the official tutorial)。因此,Java首先尝试解释!m.get(i)
并失败,因为m.get(i)
不返回布尔值。要解决此问题,您应该使用括号首先进行instanceof
评估:
else if (!((m.get(i) instanceof Highrights) || (m.get(i) instanceof LowRights))) {
答案 1 :(得分:1)
只需为此(!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
这样您的测试!(m.get(i) instanceof Highrights) || !(m.get(i) instanceof LowRights)
始终为true
,因此我认为您的测试应仅为else if (!(m.get(i) instanceof LowRights))
答案 2 :(得分:0)
只是做:
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;
}