[英]Exception in thread “main” java.lang.NullPointerException for my chess program
[英]Exception in thread “main” java.lang.NullPointerException in DVD sorting program
我试图创建一个程序,将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;
}
这两种方法都在DVD类中,我已经实现了Comparable。
我直接从一个示例中直接使用了排序算法本身,该示例按字母顺序对名称进行排序,但这里也是如此:
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并打印出已插入的内容,但是当我尝试对它们进行排序时,即使没有看到初始化为null的内容,也会出现null指针异常。 这是我的司机:
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);
}
}
我在sorting调用中使用了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方法中。
非常抱歉,如果我的问题没有遵循网站的适当礼节,这是我第一次发布。 任何帮助将不胜感激。
我的猜测是list
或list[scan]
在selectionSort()
方法中的某个位置为null。 也许尝试验证movies.collection
(从您的main方法)是否实际上存储了您认为的值。
对于Eclipse调试器来说,这是一项很好的任务。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.