【问题标题】:How to sort books in java [closed]如何在java中对书籍进行排序[关闭]
【发布时间】: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 类。问题在于排序方法。

标签: java sorting compare


【解决方案1】:

我制作的章节课程对我来说效果很好:

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

【讨论】:

  • 我也有章节课。问题是它不打印排序列表。错误似乎在排序方法中。请参阅上面的错误消息。
  • 对我来说也是。似乎问题在于堆栈跟踪所建议的“TestProgram”类,但 OP 在他的帖子中没有提到它。
  • TestProgram 和 TestClass 是一样的。我的错,我现在改了。我仍然无法让它工作,这很奇怪你们可以:-(
  • 解决了!这是我在代码中的一个小错误。谢谢大家的时间
【解决方案2】:

方法addChapter 未在类Book 中定义。这就是为什么你得到一个空指针的原因,因为没有添加章节并且你试图对一个不存在的属性进行排序。

【讨论】:

  • 我确实有方法 addChapter。我没有粘贴所有方法,因为它们在实际程序中太多了
  • 你应该这样做,因为这可能是问题的根源
  • 很抱歉,但是章节对象在某处返回 null,我建议在静态方法处添加断点并逐行遍历以查看对象 chapter 的值以及对象是否正在添加到 book 对象中。
  • 正在添加对象(我有另一种按章节编号排序的排序方法,效果很好)。感谢您尝试帮助我
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-08-18
  • 1970-01-01
  • 2023-03-07
  • 1970-01-01
  • 2018-05-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多