【问题标题】:Java object comparetoJava 对象比较
【发布时间】:2014-04-22 08:37:22
【问题描述】:
private Comparable[] items = new Comparable[1000000];   

bubbleSort(items);

public static <T extends Comparable<T>> void bubbleSort(T[] list){

    T temp;
    for (int k = 1; k < list.length; k++) {
    // Perform the kth pass
        for (int i = 0; i < list.length - k; i++) {
            if (list[i].compareTo(list[i + 1]) > 0){
                temp = list[i];
                list[i] = list[i + 1];
                list[i + 1] = temp;
            }
        }
    }
}

我遇到的问题是if (list[i].compareTo(list[i]) &gt; 0)。我已经注释掉了所有内容,一次一行。这是导致错误的唯一原因,并且在输出中没有给我任何解释。到底是哪几行。这将在 if 处,并调用 bubbleSort 方法。

【问题讨论】:

  • 一个表现良好的可比较应该总是有list[i].compareTo(list[i]) == 0。根据定义。你的意思是list[i].compareTo(list[k]) 还是相反?
  • 它实际上应该说list[i].compareTo(list[i + 1])我在原帖中修复了它。
  • 这仍然会导致问题吗?错误是什么?
  • 它说“线程中的异常“AWT-EventQueue-0”java.lang.NullPointerException”
  • @ChrisVachon 这意味着您的数组包含空元素。你如何填充它?

标签: java compare abstract compareto


【解决方案1】:
private Comparable[] items = new Comparable[1000000];  

此行不初始化数组中的任何元素。您在每个插槽中都有null,因此您的NullPointerException

或者也许你只是没有发布初始化代码,但问题就在那里。

【讨论】:

    猜你喜欢
    • 2010-11-09
    • 2016-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-20
    • 2022-01-11
    相关资源
    最近更新 更多