我正在进行CS-101分配,只允许使用单个阵列。我有一个如下所示的数组:
[Song, Song, Album, Fiction, Movie, Nonfiction, Song]
以下是背景的层次结构(来自我的作业的要求):
“在顶层,你将有一个名为Library的类。图书馆将有三个子类:Music,Book和Movie。音乐将有两个子类:Song和Album。Book将有两个子类:Fiction和Non fi ction。 ,小说,非官方,歌曲, 和专辑将没有任何子类。“
我目前正在尝试编写一种方法,按照ISBN编号对书籍进行排序。因此,小说和非小说是我的Book类的子类,它是Library的子类。
我把所有内容都放在Library myLibrary[] = new Library[100];
我不知道如何从书籍中检索ISBN并对它们进行排序,因为我只允许一个数组;否则我会喜欢制作一系列书籍,然后分开排序。
我可以利用哪些提示/算法来实现这一目标?
更新
如果需要,我可以发布更多代码。但是这个问题目前更侧重于这种方法。
答案 0 :(得分:1)
检查这是否有效。 (目前在标签上,因此无法运行代码)
[我认为在对你的书进行整理后,它会向阵列的一侧饱和。请让我知道结果]
/* book sorting is in decreasing order of ISBN, followed by non book items
The books will be at the beginning of array, other items towards the end */
Arrays.sort(myLibrary, new Comparator<Library>()
{
int compare(Library l1, Library l2){
//if both are books then compare ISBN and return appropriate
if((l1 instanceof Book) && (l2 instanceof Book)){
Book b1=(Book)l1; Book b2=(Book)l2;
if(b1.getISBN()<b2.getISBN) {
return -1;
} else if(b1.getISBN()>b2.getISBN()) {
return 1;
} else {
return 0;
}
}
else {//if either one, or none are Book
//if only l1 is Book, l2 is not
if(l1 instanceof Book){
return 1;
}
//if only l2 is Book, l1 is not
if(l2 instanceof Book){
return -1;
}
//none are Book
return 0;
}
}
}
);
答案 1 :(得分:0)
如果不尝试给出算法的实际实现,您应该执行就地排序,其中优先级可以通过以下方式完成:
1。图书优先于音乐和电影
2. 如果两个对象是图书,则优先级基于ISBN