如何对 java 中的图书进行排序
How to sort books in java
我的代码有一些问题。我创建了一个书籍对象并向其中添加了一些章节。章节有章节编号和名称。
我尝试按章节名称的长度对书籍进行排序,但它不起作用。谁能明白为什么?问题似乎出在排序方法上。
编辑:
我收到的错误信息是这样的
Exception in thread "main" java.lang.NullPointerException
at TestProgram.Book.compare(Book.java:52)
at TestProgram.Book.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);
}
}
}
在class书中:
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;
}
}
方法 addChapter
未在 class Book
中定义。这就是为什么你得到一个空指针的原因,因为没有添加章节并且你试图对不存在的属性进行排序。
我制作的章节 class 很适合我:
class Chapter {
private int num;
private String text;
public Chapter(int i,String s) { num = i; text = s; }
public String getText() { return text; }
public String toString() { return text; }
}
我也是这样实现addChapter方法的:
public void addChapter(Chapter c) { chapters.add(c); }
输出为:
-1
2
1
-1
0
-5
-4
-4
The boat ride
The child
The house
The trip
Finally
我的代码有一些问题。我创建了一个书籍对象并向其中添加了一些章节。章节有章节编号和名称。 我尝试按章节名称的长度对书籍进行排序,但它不起作用。谁能明白为什么?问题似乎出在排序方法上。
编辑: 我收到的错误信息是这样的
Exception in thread "main" java.lang.NullPointerException
at TestProgram.Book.compare(Book.java:52)
at TestProgram.Book.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);
}
}
}
在class书中:
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;
}
}
方法 addChapter
未在 class Book
中定义。这就是为什么你得到一个空指针的原因,因为没有添加章节并且你试图对不存在的属性进行排序。
我制作的章节 class 很适合我:
class Chapter {
private int num;
private String text;
public Chapter(int i,String s) { num = i; text = s; }
public String getText() { return text; }
public String toString() { return text; }
}
我也是这样实现addChapter方法的:
public void addChapter(Chapter c) { chapters.add(c); }
输出为:
-1
2
1
-1
0
-5
-4
-4
The boat ride
The child
The house
The trip
Finally