不是 class 向量 java 的实例

Not an instance of a class Vectors java

我想知道如何检查向量中的元素是否不是 class 的实例。 场景是如果向量 m 中的元素存在于 class 中,我们增加总和。如果 i 不是 class 的实例,那么我们 return -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 导致错误。我想知道是否有一种方法可以说明元素是否不是此 class.

的实例

只需将此 (!m.get(i) instanceof Highrights) 更改为此 !(m.get(i) instanceof Highrights)。实际上 !boolean 值的运算符,但这里 m.get(i) 不是 return 一个 boolean 而是一个对象,所以它不会编译,所以你需要将它放在括号之外以获得测试的负值 x instanceof y.

所以最后的测试是!(m.get(i) instanceof Highrights) || !(m.get(i) instanceof LowRights)

注意: 这里你的测试在 else if 中,这意味着之前的 if 失败了所以你已经知道 m.get(i) instanceof HighRightsfalse 这样你的测试将 !(m.get(i) instanceof Highrights) || !(m.get(i) instanceof LowRights) 永远是 true 所以我相信你的测试应该只是 else if (!(m.get(i) instanceof LowRights))

一元运算符(如!)在Java中的优先级高于关系运算符(如instanceof)(详见the official tutorial)。所以 Java 首先尝试解释 !m.get(i) 但失败了,因为 m.get(i) 不是 return 布尔值。为了解决这个问题,您应该使用括号使 instanceof 先求值:

else if (!((m.get(i) instanceof Highrights) || (m.get(i) instanceof LowRights))) {

就这样:

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