compareTo()Java快速问题

时间:2011-05-25 02:03:56

标签: java class methods if-statement compareto

我的代码中有这个方法

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

我可能做错了什么想法?

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

当应用程序在需要对象的情况下尝试使用null时,抛出

NullPointer Exception。检查您的items[i]值。其中一个值必须为null,这就是编译器抛出NullPointerException的原因。

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

执行此操作时,您尝试将空值与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;
    }
 }

答案 2 :(得分: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;
}