我有这个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类中调用方法sort之后无法传递断言!我无法弄清楚我的代码有什么问题,有人可以帮我吗?
请记住:我必须制作我的代码才能通过assert
。
我不确定我的库实现,以便在测试工作中使这一行:
List l = lib;
不确定ArrayList扩展名。
附:我知道使用泛型类型会更好,但我不能将它们用于此练习。没有使用它们我得到一些警告,只是忽略它们。
答案 0 :(得分:2)
您对Library
课程的实施确实是错误的 - 它不应该拥有一个Book
的列表,它应该 Book
的列表 - 这是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;
}
}