如何对 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