0

我正在尝试创建一个程序,将 DVD 信息放入数组中,并使用 Comparable 中的 compareTo 方法根据标题按字母顺序对它们进行排序。

我有一个布尔方法可以确定两个标题是否相同:

public boolean equals (Object other)
{
    return (title.equals(((DVD)other).getTitle()));
}

我的 compareTo 方法如下所示:

public int compareTo (Object other)
{
    int result;

    String otherTitle = ((DVD)other).getTitle();

    result = title.compareTo(otherTitle);

    return result;
}

这两种方法在我实现 Comparable 的 DVD 类中。

我直接从一个按字母顺序对名称进行排序的示例中使用了排序算法本身,但这里也是如此:

public class DVDSorting 
{
    public static void selectionSort (Comparable[] list)
    {
        int min;
        Comparable temp;

        for (int index = 0; index < list.length-1; index++)
        {
            min = index;
            for (int scan = index+1; scan < list.length; scan++)
                if (list[scan].compareTo(list[min]) < 0)
                    min = scan;

            temp = list[min];
            list[min] = list[index];
            list[index] = temp;
        }
    }

    public static void insertionSort(Comparable[] list)
    {
        for (int index = 1; index < list.length; index++)
        {
            Comparable key = list[index];
            int position = index;
            while (position > 0 && key.compareTo(list[position-1]) < 0)
            {
                list[position] = list[position-1];
                position--;
            }

            list[position] = key;
        }
    }
}

然后我创建了一个 DVDCollection 类来初始化数组并包含一个添加 DVD 的方法。

在我要测试的驱动程序类中,我能够插入 DVD 并打印出插入的内容,但是当我尝试对它们进行排序时,我得到一个空指针异常,即使我没有看到任何初始化为空的东西。这是我的司机:

public class Movies
{
    public static void main (String[] args)
    {
        DVDCollection movies = new DVDCollection();

        movies.addDVD("The Godfather", "Francis Ford Coppola", 1972, 24.95, true);
        movies.addDVD("District 9", "Neill Blomkamp", 2009, 19.95, false);
        movies.addDVD("Iron Man", "Jon Favreau", 2008, 15.95, false);
        movies.addDVD("All About Eve", "Joseph Mankiewicz", 1950, 17.50, false);
        movies.addDVD("The Matrix", "Andy & Lana Wachowski", 1999, 19.95, true);
        movies.addDVD("Clash of the Titans", "Louis Leterrier", 2010, 19.95, true);

        DVDSorting.selectionSort(movies.collection);
        System.out.println (movies);

        movies.addDVD("Iron Man 2", "Jon Favreau", 2010, 22.99, false);
        movies.addDVD("Casablanca", "Michael Curtiz", 1942, 19.95, false);
        movies.addDVD("Clash of the Titans", "Desmond Davis", 1981, 5.00, false);


        DVDSorting.selectionSort(movies.collection);
        System.out.println (movies);
    }
}

我在排序调用中使用了 movies.collection ,因为当我尝试只使用我看过的示例之类的电影时,它说 selectionSort 不适用于电影所以我将 collection 设为公共变量并使用它。

这是错误。

Exception in thread "main" java.lang.NullPointerException
    at DVDSorting.selectionSort(DVDSorting.java:13)
    at Movies.main(Movies.java:15)

它告诉我错误在 DVDSorting 类中,但由于它是从另一个来源复制的,我感觉实际错误在我的 DVD 类中的 compareTo 方法中。

如果我的问题不符合网站的适当礼仪,我很抱歉,这是我第一次发帖。任何帮助将不胜感激。

4

1 回答 1

0

我的猜测是,或者list在方法list[scan]中的某个点为空selectionSort()。也许尝试验证movies.collection(从您的主要方法)实际上存储了您认为的值。

对于 Eclipse 调试器来说,这是一项很好的任务。

于 2013-04-05T03:37:15.997 回答