不是 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 HighRights
是false
这样你的测试将 !(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;
}
我想知道如何检查向量中的元素是否不是 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 HighRights
是false
这样你的测试将 !(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;
}