首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java,用compareTo方法在ToString中按字母顺序打印数组列表

Java,用compareTo方法在ToString中按字母顺序打印数组列表
EN

Stack Overflow用户
提问于 2020-03-15 04:34:01
回答 1查看 142关注 0票数 0

我想按字母顺序打印"medewerkers“(英语雇员)列表中的人员。

我做了一个按字母顺序排列的compareTo方法,这个方法设置在一个叫做"Persoon“(英文中的person)的抽象类中。我想打印"Bedrijf“类的ToString方法,这必须按字母顺序打印数组中的名称。但我想不出该怎么做。

我的程序结构如下:

我有一个类“Bedrijf”(英语公司),其中公司的所有员工都被设置在一个数组列表中。我还有一个抽象类"Persoon“(英语中的person),因为一家公司有人员。在这些类中,我定义了不同的函数,比如manager、normal employee (在我的程序中是Werknemer)等等。现在所有这些人都设置在"Bedrijf“类的数组列表中,我想按字母顺序打印我在数组列表中设置的所有姓名。

我的主类通过Bedrijf的"neemInDienst“方法将人添加到lisy中:

代码语言:javascript
复制
public class Main {

    /**
     * The entry point of application.
     *
     * @param args the input arguments
     */
    public static void main(String[] args) {

        Bedrijf bedrijf = new Bedrijf("HvA");

        Werknemer w = new Werknemer(1200.00, "Jantine Jansen");
        bedrijf.neemInDienst(w);

        Werknemer we = new Werknemer(1300.00, "Piet Pietersen");
        bedrijf.neemInDienst(we);

        Vrijwilliger v = new Vrijwilliger("Guus Goedhart");
        bedrijf.neemInDienst(v);
        v.huurIn(10);

        Manager m = new Manager(10000.00, "Brigitte Baas");
        bedrijf.neemInDienst(m);
        m.kenBonusToe(750);

        Manager a = new Manager(10000.00, "Dirk Teur");
        bedrijf.neemInDienst(a);
        a.kenBonusToe(1200);

        Zzper z = new Zzper(120, "Beun Haas");
        bedrijf.neemInDienst(z);
        z.huurIn(40);

        // print de toString van het bedrijf
        System.out.println(bedrijf);

        // print alle inkomsten van de personen in het bedrijf (alle functies)
        bedrijf.printInkomsten();

        // print de aantal van de managers
        System.out.println("\nAantal in management: " + bedrijf.aantalManagers());
    }

}

类Bedrijf,这里是arraylist,也是我想要打印的那个:

代码语言:javascript
复制
public class Bedrijf {
    private String naam;


    /**
     * lijst van alle Medewerkers.
     */
    protected List<Persoon> medewerkers = new ArrayList<>();

    //Magic numbers
    static private int MIN_MANAGERS = 0;


    /**
     * Instantiates a new Bedrijf.
     *
     * @param naam the naam
     */
    public Bedrijf(String naam) {
        this.naam = naam;
    }

    /**
     * Print inkomsten.
     *
     */
    public void printInkomsten() {
        System.out.println("Inkomsten van alle personen:\n");


        for (Persoon p : medewerkers) {
            if (p.berekenInkomsten() == 0) {
                System.out.println(p.naam + "," + " bedankt voor uw inzet!"); // Voor de vrijwilligers
            } else {
                System.out.println(p.naam + "," + " inkomsten: " + p.berekenInkomsten()); // Voor alle andere personen
            }
        }
    }


    /**
     * Aantal managers int.
     *
     * @return the int
     */
    public int aantalManagers() {
        int managers = MIN_MANAGERS;
        for (Persoon person : medewerkers) {
            if (person instanceof Manager) {
                managers++;
            }
        }
        return managers;
    }

    /**
     * Neemin dienst.
     *
     * @param persoon the persoon
     */
    public void neemInDienst(Persoon persoon) {
        this.medewerkers.add(persoon);

    }

    @Override
    public String toString() {
        String a = "Bedrijf " + naam + " heeft " + medewerkers.size() + " mederwerkers:\n";
        StringBuilder namen = new StringBuilder();
        for (Persoon x : medewerkers) {
            namen.append(x.naam).append("\n");
        }

        return a + namen;
    }


}

抽象类"Persoon“

代码语言:javascript
复制
public abstract class Persoon implements Comparable<Persoon> {
    String naam;

    /**
     * Instantiates a new Persoon.
     *
     * @param naam the naam
     */
    public Persoon(String naam) {
        this.naam = naam;
    }

    /**
     * Bereken inkomsten.
     *
     * @return the double
     */
    public abstract Double berekenInkomsten();

    /**
     * compareto method om int terug te geven voor alfabetische volgorde
     *
     * @param other
     * @return laagste int is eerste in de alfabetische volgorde
     */
    @Override
    public int compareTo(Persoon other){
        return this.naam.compareTo(other.naam);
    }

    @Override
    public String toString() {
        return this.naam;
    }
}

也许如果它更容易阅读它所涉及的函数:

代码语言:javascript
复制
@Override
    public String toString() {
        String a = "Bedrijf " + naam + " heeft " + medewerkers.size() + " mederwerkers:\n";
        StringBuilder namen = new StringBuilder();
        for (Persoon x : medewerkers) {
            namen.append(x.naam).append("\n");
        }

        return a + namen;
    }

我对Java还很陌生,所以如果有人能帮上忙那就太好了!提前感谢!

EN

回答 1

Stack Overflow用户

发布于 2020-03-16 04:35:03

在评论的帮助下修复了这个问题。

添加:

代码语言:javascript
复制
Collections.sort(medewerkers)

在to string方法中,在循环遍历列表以按字母顺序打印所有名称之前。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60687074

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档