好的,所以我要进行一次小型实验室测试,这对我来说很难。我设法从已经参加过该课程的人那里获得了一个示例主题,但是我在解决它方面遇到了问题。主题如下:


创建类Apartment(int nr,字符串方向),并创建一个LuxuryApartment类,该类继承自Class类,并且其属性表面类型为Float。


我猜这很简单,这里没有问题。


创建扩展MyLinkedList类的类MyLinkedList,以便您可以在其中存储Apartment类型的对象。添加一个名为sortByOrientation()的方法,该方法将使用定义为普通内部类的比较器按其方向按字母顺序对公寓进行排序。


这是我遇到麻烦的地方。我可以创建我的类MyLinkedList,但不了解sortByOrientation()方法的外观。


创建一个用于初始化MyLinkedList的测试程序。新增3套公寓和3套LuxuryApartments。打印列表,使用sortByOrientation()方法对列表进行排序,并使用迭代器打印列表。


如果他们前面说我应该上课,这样我只能存储公寓,我如何将LuxuryApartments添加到MyLinkedList中?


将非豪华公寓移至LinkedList,将豪华公寓移至LinkedList。创建一个列出公寓和豪华公寓的方法。


我想这并不难,但是移动意味着什么呢?我是否可以从上述MyLinkedList中租用公寓?

有人可以给我一些指导吗?我真的在这里迷路了。抱歉,如果我的问题很愚蠢/不遵守准则/等等。但是我真的不知道如何进行这项练习。

Apartment类-我不确定我是否需要实现Comparable接口,正如我之前所说,目前我对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);
    }
}


从我的Apartment类继承的我的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);
            }
        });

        }
    }
}
}

最佳答案

对于列表类,应该从方法中对列表(this)进行排序。您已经创建了一个额外的Comparator ,当它应返回-1时返回0,并尝试对其进行排序。

您不需要实现Comparable接口,因为您是用这种方式实现的,无论如何,我相信您应该使用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,因此可以将其实例添加到您的自定义列表中。 (因为它们也是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);
    }
}


然后打印出列表。

08-06 03:54