【发布时间】:2015-01-10 19:44:44
【问题描述】:
我的代码有一些问题。我创建了一个书本对象并向其中添加了一些章节。章节有章节编号和名称。 我尝试按章节名称的长度对书籍进行排序,但它不起作用。谁能明白为什么?问题似乎出在排序方法上。
编辑: 我得到的错误信息是这样的
Exception in thread "main" java.lang.NullPointerException
at TestProgram.Book$2.compare(Book.java:52)
at TestProgram.Book$2.compare(Book.java:49)
at java.util.TimSort.countRunAndMakeAscending(TimSort.java:351)
at java.util.TimSort.sort(TimSort.java:216)
at java.util.Arrays.sort(Arrays.java:1435)
at java.util.Collections.sort(Collections.java:230)
at TestProgram.Book.sort(Book.java:36)
at TestProgram.Book.sortByTextLenght(Book.java:49)
at TestProgram.Testprogram.main(TestProgram.java:60)
在测试程序中:
public class TestProgram {
public static void main(String[] args) {
Book b = Book.createTestBook();
b.sortByTextLenght();
printBook(b);
}
private static void printBook(Book b) {
ArrayList<Chapter> chapters = b.getAllChapters();
for (Chapter c : chapters) {
System.out.println(c);
}
}
}
课本:
public class Book {
private String title;
private String author;
private ArrayList<Chapter> chapters;
public Book(String title, String author) {
this.title = title;
this.author = author;
this.chapters = new ArrayList<Chapter>(); }
public static Book createTestBook() {
Book book = new Book("My first book", "John Johnson");
Chapter chapter = new Chapter(5, "The trip");
book.addChapter(chapter);
chapter = new Chapter(2, "The child");
book.addChapter(chapter);
chapter = new Chapter(1, "Finally");
book.addChapter(chapter);
chapter = new Chapter(8, "The house");
book.addChapter(chapter);
chapter = new Chapter(3, "The boat ride");
book.addChapter(chapter);
return book;
}
public void sort(Comparator<Chapter> sortOrder) { //Problem seem to be here
Collections.sort(chapters, sortOrder);
}
public void sortByTextLenght() {
sort(new Comparator<Chapter>() {
@Override
public int compare(Chapter c1, Chapter c2) {
System.out.println(c2.getText().length() - c1.getText().length());
return c2.getText().length() - c1.getText().length();
}
});
}
public ArrayList<Chapter> getAllChapters() {
return chapters;
}
}
【问题讨论】:
-
“它不起作用” - 究竟是什么方式?碰撞?堆栈跟踪?
-
查看我收到的错误消息的更新信息
-
请发布无效的代码。当我为
Chapter类添加一个简单的实现并将addChapter实现添加到Book时,这工作正常。 -
发布的异常堆栈说“在 TestProgram.Testprogram.main(TestProgram.java:60) 发生异常”但是这个“TestProgram”类在哪里......?
-
我有一个 addChapter 方法和一个 Chapter 类。问题在于排序方法。