【问题标题】:compareTo() Java Quick QuestioncompareTo() Java 快速问题
【发布时间】:2024-05-18 15:50:02
【问题描述】:

我的代码中有这个方法

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

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

【问题讨论】:

  • 显然 items[i] 为空。现在找出原因。
  • 是的,我有一个计数器来保持数组的大小,在我删除一些项目后,由于我正在使用数组,所以有一些空值,所以我必须在 if 语句中更改 items.length反击
  • 更多关于 NullPointer 异常:*.com/questions/218384/…
  • 你应该使用 equals(),而不是 compareTo()。

标签: java class methods if-statement compareto


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    NullPointer Exception 当应用程序在需要对象的情况下尝试使用 null 时抛出。检查您的 items[i] 值。其中一个值必须为空,这就是编译器抛出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;
        }
     }
    

    【讨论】:

    • 非常感谢。我修复了它,我确实有一些空值。我只是将 items.length 更改为在数组中保留下一个空值的计数器。
    【解决方案3】:

    您的某个项目为空,您可以在尝试调用 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;
    }
    

    【讨论】: