0

我的代码中有这个方法

public boolean has(AnyType x){

        for(int i=0; i<items.length; i++)
            if(items[i] == x)
                return true;

        return false;
    }

我想重写 if 语句以使用 compareTo() 方法,根据我的记忆,它应该是这样的:

if(items[i].compareTo(x) == 0)

但这给了我一个错误

Exception in thread "main" java.lang.NullPointerException

关于我可能做错了什么的任何想法?

4

3 回答 3

3

您的一项 [] 为空。检查元素是否正确设置为非空值。

于 2011-05-25T02:06:16.083 回答
2

当应用程序在需要对象的情况下尝试使用 null 时,将引发NullPointer 异常。检查你的items[i]价值观。其中一个值必须为 null,这就是编译器抛出NullPointerException.

if(items[i].compareTo(x) == 0)

执行此操作时,您试图将 null 值与 进行比较x,这确实会引发NullPointerException.

做检查not-a-null-value测试。尝试这个,

public boolean has(AnyType x){

      for(int i=0; i<items.length; i++) {
            if(items[i] != null && items[i] ==x)
                   return true;
         return false;
    }
 }
于 2011-05-25T02:07:39.573 回答
1

您的项目之一为空,您可以在尝试调用之前对其进行验证compareTo

您还可以使用增强的 for 循环:

public boolean has(AnyType x){
    for( AnyType n : items ) {
        if( ( n == null && n == x )  || 
            ( n != null && n.compareTo( x ) == 0  ) ) { 
            return true;
        }
     }
     return false;
}
于 2011-05-25T02:18:02.817 回答