好的,我有个小的实验室测试,这个题目对我来说很难。我设法从一个已经学过它的人那里得到了一个例子,但我在解决这个问题时遇到了问题。主题如下:
创建类单元(int nr,String定向),并拥有一个类LuxuryApartment,它继承了类单元,并具有一个类型为Float的属性面。
我想这很简单,这里没有问题。
创建类MyLinkedList,它扩展类LinkedList,以便在其中存储单元类型对象。添加一个名为sortByOrientation()的方法,它将使用定义为普通内部类的比较器,按其方向按字母顺序对公寓进行排序。
这是我遇到麻烦的地方。我可以创建类MyLinkedList,但是我不明白sortByOrientation()方法应该是什么样子。
创建一个初始化MyLinkedList的测试程序。增加3套公寓和3 LuxuryApartments。打印列表,使用sortByOrientation()方法对列表进行排序,并使用迭代器打印列表。
如果他们之前说我应该上LuxuryApartments,所以我只能存储公寓,那么我如何将MyLinkedList添加到一个MyLinkedList中呢?
把不豪华的公寓搬到LinkedList,把豪华的搬到LinkedList。创建一个列出公寓和豪华公寓的方法。
我想这并不难,但他们所说的搬家是什么意思?我要从上面提到的MyLinkedList拿走我的公寓吗?
有人能给我一些关于这个练习的建议吗?我真的迷路了。对不起,如果我的问题很愚蠢/不尊重指导方针/等等,但我真的没有办法让这个练习进行下去。
公寓类-我不确定它是否需要实现可比较的接口,就像我说的,我现在对Java很差
public class Apartament implements Comparable<Apartament>{
private int nr;
private String orientare;
public int getNr() {
return nr;
}
public void setNr(int nr) {
this.nr = nr;
}
public String getOrientare() {
return orientare;
}
public void setOrientare(String orientare) {
this.orientare = orientare;
}
public Apartament(int nr, String orientare){
this.nr=nr;
this.orientare=orientare;
}
public int compareTo(Apartament ap){
return ap.orientare.compareTo(this.orientare);
}
}我的LuxuryApartment类,它继承了我的公寓类
public class ApartamentLux extends Apartament{
private float suprafata;
public float getSuprafata() {
return suprafata;
}
public void setSuprafata(float suprafata) {
this.suprafata = suprafata;
}
public ApartamentLux(int n, String o, float suprafata){
super(n,o);
this.suprafata=suprafata;
}
}这是我真正迷失的地方,似乎无法让它发挥作用。
import java.text.Collator;
import java.util.Comparator;
import java.util.LinkedList;
public class MyLinkedList extends LinkedList<Apartament>{
public MyLinkedList(){
super();
}
private static class OrComp implements Comparator<String>{
public int compare(String s1, String s2){
if(s1.compareTo(s2)<0)
return 1;
else return 0;
}
public void sortByOrientare(OrComp list){
list.sort(new Comparator<String>(){
@Override
public int compare(String s1, String s2){
return Collator.getInstance().compare(s1, s2);
}
});
}
}
}
}发布于 2016-10-20 21:57:47
对于list类,应该从方法中对列表(this)进行排序。您已经创建了一个额外的比较器,当它应该返回-1时返回0,并尝试对其进行排序。
您不需要实现类似的接口,因为您是这样做的,无论如何,我认为您应该使用this.orientare.compareTo(other.orientare)而不是相反的方式。
但是使用自定义方法和比较器(这似乎是练习所要求的),这里有一个更简单的方法来实现这个功能。
import java.text.Collator;
import java.util.Comparator;
import java.util.LinkedList;
public class MyLinkedList extends LinkedList<Apartament> {
public void sortByOrientare(){
sort(new MyComparator());
}
class MyComparator extends Comparator<Apartament> {
@Override
public int compare(Apartament s1, Apartament s2){
return Collator.getInstance().compare(s1.getOrientare(), s2.getOrientare());
}
}
}由于ApartamentLux扩展了Apartament,所以可以将它的实例添加到自定义列表中。(因为它们也是阿巴达的例子)
似乎你已经把所有的事情都解决了,除了把名单分开。我猜,但我想他们想要的是这样的东西:
LinkedList<Apartament> list1 = new LinkedList<>();
LinkedList<Apartament> list2 = new LinkedList<>();
for(Apartament a : myList) {
if(a instanceof ApartamentLux) {
list2.add(a);
} else {
list1.add(a);
}
}然后打印出名单。
发布于 2016-10-20 21:32:30
如果他们之前说我应该上LuxuryApartments,所以我只能存储公寓,那么我如何将MyLinkedList添加到一个MyLinkedList中呢?
因为MyLinkedListtype可以存储公寓类型,所以它也可以存储LuxuryApartments,因为它是一个子类。
https://stackoverflow.com/questions/40164805
复制相似问题