【发布时间】:2014-04-12 05:57:40
【问题描述】:
我是java新手 我有一个有 4 个属性的类,我需要根据它对我的对象进行排序。我可以在 Author , title 和 price 上实现三个级别的排序,任何人都可以帮助我将其扩展到出版商。
我的代码: 首先根据作者姓名对对象进行排序,如果作者姓名相同,则按标题排序,如果标题相同,则按价格排序。
现在我想如果价格相同,按出版商排序。谁能帮我解决这个问题?
代码如下:
//Book.java
public class Book implements Comparable<Book>{
String title;
String author;
double price;
String publisher;
//getters and setters for 4 variables
public int compareTo(Book book){
if(book == null){
throw new NullPointerException("Book passed is null!");
}
if(this.getAuthor().equals(book.getAuthor())){ /*Most significant field*/
if(this.getTitle().equals(book.getTitle())) /*Next Most significant field*/
return (int)(this.getPrice()-book.getPrice());
else
return this.getTitle().compareTo(book.getTitle());
}
else
return this.getAuthor().compareTo(book.getAuthor());
}
}
//BookComparison.java
import java.util.Arrays;
public class BookComparision{
public static void main(String args[]){
Book book1 = new Book();
book1.setAuthor("Author A");
book1.setTitle("Title B");
book1.setPrice(225.00);
Book book2 = new Book();
book2.setAuthor("Author A");
book2.setTitle("Title B");
book2.setPrice(125.00);
Book book3 = new Book();
book3.setAuthor("Author B");
book3.setTitle("Title B");
book3.setPrice(125.00);
Book book4 = new Book();
book4.setAuthor("Author B");
book4.setTitle("Title A");
book4.setPrice(200.00);
Book book5 = new Book();
book5.setAuthor("Author C");
book5.setTitle("Title C");
book5.setPrice(125.00);
Book book6 = new Book();
book6.setAuthor("Author C");
book6.setTitle("Title B");
book6.setPrice(125.00);
Book book7 = new Book();
book7.setAuthor("Author C");
book7.setTitle("Title B");
book7.setPrice(400.00);
/* An array containing Books*/
Book[] bookArray = new Book[7];
bookArray[0]=book1;
bookArray[1]=book2;
bookArray[2]=book3;
bookArray[3]=book4;
bookArray[4]=book5;
bookArray[5]=book6;
bookArray[6]=book7;
System.out.println("Sorted Books:");
Arrays.sort(bookArray);
for(int i=0;i<=6;i++){
System.out.print("Author:"+bookArray[i].getAuthor()+" ");
System.out.print("Title:"+bookArray[i].getTitle()+" ");
System.out.println("Price:"+bookArray[i].getPrice());
}
}
}
提前致谢 玛纳斯
【问题讨论】:
-
如果您能够实现对 4 个元素的排序,那么实现另一个条件的问题在哪里?旁注:请始终使用大括号,它使您的代码更具可读性且不易出错。
-
嗨 Leos,到目前为止,我可以按 3 个属性对其进行排序,即作者、标题和价格。但我想将排序扩展到 Publisher。上面的代码仅对 3 个属性而不是第 4 个不基于发布者的属性进行排序
-
好吧,我会尽量让它更具可读性。但是,您延长条件的问题在哪里?
-
比较作者。如果不相等,你就完成了。然后比较标题。如果不相等,你就完成了。然后比较价格。如果不相等,你就完成了。然后比较出版商。比较使用的是 compareTo() 方法,而不是 equals() 方法。