不是java类的实例
我想知道如何检查向量中的元素是否不是类的实例。 这种情况是,如果向量m中的元素存在于一个类中,则我们增加了sum。如果不是java类的实例,java,vector,syntax-error,instanceof,Java,Vector,Syntax Error,Instanceof,我想知道如何检查向量中的元素是否不是类的实例。 这种情况是,如果向量m中的元素存在于一个类中,则我们增加了sum。如果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) {
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;
}
}
public static int CountHighs(向量m){
整数和=0;
对于(int i=0;i
为了受访者的利益,我在这里使用了运算符“!”
!m、 获取导致错误的
。我想知道是否有一种方法可以说明元素是否不是此类的实例。只需将此(!m.get(I)instanceof Highrights)
更改为此!(m.get(i)高权限实例)
。的确是
是一个用于布尔值的运算符,但这里m.get(i)
不返回布尔值,而是一个对象,因此它不会编译,因此您需要将它放在父项之外,以获取测试的负值x instanceof y
所以最后的测试是!(m.get(i)高权限实例)| | |!(m.get(i)低权限实例)
NB:这里您的测试是在else if
中进行的,这意味着前面的if
失败,因此您已经知道m.get(i)instanceof HighRights
是false
,这样您的测试将!(m.get(i)高权限实例)| | |!(m.get(i)低权限实例)
将始终是正确的
,因此我认为您的测试应该是,否则如果(!(m.get(i)低权限实例))
只需更改此(!m.get(i)高权限实例)
!(m.get(i)高权限实例)
。的确是
是一个用于布尔值的运算符,但这里m.get(i)
不返回布尔值,而是一个对象,因此它不会编译,因此您需要将它放在父项之外,以获取测试的负值x instanceof y
所以最后的测试是!(m.get(i)高权限实例)| | |!(m.get(i)低权限实例)
NB:这里您的测试是在else if
中进行的,这意味着前面的if
失败,因此您已经知道m.get(i)instanceof HighRights
是false
,这样您的测试将!(m.get(i)高权限实例)| | |!(m.get(i)instanceof lowrits)
将始终是真的
,因此我认为您的测试应该是,否则如果在Java中(!(m.get(i)instanceof lowrits))
一元运算符(例如!
)比关系运算符(例如instanceof
)具有更高的优先级(有关详细信息,请参阅)。所以Java试图解释!m、 首先获取(i)
并失败,因为m.get(i)
不返回布尔值。为了解决此问题,应使用括号首先计算实例的值:
else if (!((m.get(i) instanceof Highrights) || (m.get(i) instanceof LowRights))) {
Java中一元运算符(如!
)的优先级高于关系运算符(如instanceof
)(有关详细信息,请参阅)。所以Java试图解释!m、 首先获取(i)
并失败,因为m.get(i)
不返回布尔值。为了解决此问题,应使用括号首先计算实例的值:
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))
括号将把整个语句视为一个布尔值,然后你可以用来否定它代码>。另外,由于您使用了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;
}
public static int CountHighs(向量m){
整数和=0;
对于(int i=0;i只需执行:
else if(!(m.get(i) instanceof LowRights))
我还格式化了您的其余代码,并进行了不必要的检查:
else if(!(m.get(i) instanceof Highrights))
括号将把整个语句视为一个布尔值,然后你可以用!
来否定它。另外,如果使用else,则意味着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;
}
public static int CountHighs(向量m){
整数和=0;
对于(int i=0;iSo到底是什么问题?@Mureinik the!m.gets给我造成了一个错误,我想知道是否有一种方法可以说明元素是否不是此类的实例。对于不明确的catch(NullPointerException E)表示歉意
什么?而那个块甚至没有做任何有用的事情。@duldi你得到了什么错误?你有没有想过使用括号?比如!(m.get(i)instanceof Highrights))
…那么到底是什么问题?@Mureinik the!m.get导致了我一个错误,我想知道是否有一种方法可以说明元素是否不是此类的实例。对于不明确的捕获(NullPointerException E)表示歉意
什么?那个块甚至没有什么用处。@duldi你犯了什么错误?你有没有想过使用括号?比如!(m.get(i)instanceof Highrights))
…谢谢你,我想知道为什么会有这么大的不同,谢谢你的帮助这是错误的!(a | | B)=>!A&&!B这不是OP想要的,就像Nicolas提到的,当你从表达式中提取否定时,你需要使用&&
而不是|
。谢谢,我想知道为什么它会有这么大的不同,tha