【问题标题】:Java specific exercise with Collections.sort使用 Collections.sort 进行 Java 特定练习
【发布时间】:2015-04-26 17:12:26
【问题描述】:

我有这个Test 类,我必须编写其他类代码才能传递断言。 那是Test 类:

import java.util.*;

public class Test
{
    public static void main(String[] args)
    {
        Book javabook = new Book("Learn Java",150);
        Book cbook = new Book("C",120); 
        Book[] books = new Book[] {javabook, cbook};

        Library lib = new Library(books);
        assert(lib.pages() == 270);

        List l = lib;
        assert(l.size() == 2);

        Collections.sort(l); 

        assert(l.get(0) == cbook);
        assert(l.get(1) == javabook);
    }
}

我开始制作 Book 类,这是我的实现:

public class Book implements Comparable
{
    private String name;
    private int pages;

    public Book(String name, int pages)
    {
        this.name = name;
        this.pages = pages;
    }

    public int getPages()
    {
        return this.pages;
    }

    public int compareTo(Object obj)
    {
        if(this == obj) return 0;
        else
        {
            Book x = (Book) obj;
            return this.pages - x.pages;
        }
    }
}

然后我写了 Library 类:

import java.util.*;

public class Library extends ArrayList
{
    ArrayList a;

    public Library(Book[] b)
    {
        a = new ArrayList(b.length);
        for(int i=0; i<b.length; i++)
        {
            a.add(b[i]);
        }
    }

    public int pages()
    {
        int p = 0;
        for(int i=0; i<a.size(); i++)
        {
            p += ( (Book) a.get(i) ).getPages();
        }   
        return p;
    }

    public int size()
    {
        return a.size();
    }

    public Object get(int i)
    {
        return a.get(i);
    }
}

我认为问题出在Library 类上,似乎Collections.sort 不起作用,并且在调用Test 类中的方法排序后我无法通过断言!我无法弄清楚我的代码有什么问题,有人可以帮我吗?

记住:我必须编写代码才能通过asserts。 我不确定我的库实现是否可以在测试中使用此行:

List l = lib;

不确定 ArrayList 扩展。
附言我知道使用泛型类型更好,但我不能在这个练习中使用它们。如果不使用它们,我会收到一些警告,请忽略它们。

【问题讨论】:

  • Collections.sort 使用一些方法,如迭代器,您的 Library 类不会委托给 a。您可能会感到困惑的是,每个库都涉及两个数组列表状态——一个来自扩展 ArrayList,另一个来自 a
  • 所以问题是我的类没有实现迭代器方法?

标签: java sorting collections


【解决方案1】:

Library 类的实现确实是错误的 - 它不应该Books 列表,它应该@987654323 列表@s - 这就是它扩展 ArrayList 的原因:

public class Library extends ArrayList<Book> {
    // Note: no additional data members.
    // The Library is already a List<Book>:

    public Library(Book[] b) {
        super(Arrays.asList(b));
    }

    public int pages() {
        int p = 0;
        for(int i = 0; i < size(); i++) {
            p += get(i).getPages();
        }
        return p;
    }
}

【讨论】:

  • 谢谢!这个解决方案对我很有帮助,没想到这么简单,但是我不知道Arrays.asList方法所以我想我自己无法得到这种解决方案。再次感谢。
猜你喜欢
  • 2012-07-15
  • 1970-01-01
  • 1970-01-01
  • 2018-05-13
  • 2021-04-19
  • 1970-01-01
  • 1970-01-01
  • 2010-11-06
  • 1970-01-01
相关资源
最近更新 更多