数组列表中的Java对象

时间:2019-05-20 22:05:11

标签: java arraylist

我想为我创建的每个对象自动运行更新功能。我必须在代码中做些什么更改,很遗憾,它不起作用

如何初始化ArrayList中的对象?

:(

创建一个数组列表并使用名称初始化

public class Main {
    public static void main(String... args) {
        Zuhoerer Maria = new Zuhoerer("Maria");
        Zuhoerer Sepp = new Zuhoerer("Sepp");
        Zeitansager.sagAn();
    }
}

class Zuhoerer {
    private String name;
    private String Ansager;

    Zuhoerer(String name) {
        this.name = name;
    }

    private void setAnsager(String datumstring) {
        Ansager = datumstring;
    }

    void update() {
        setAnsager(Zeitansager.getZeit());
        Zeitansager.schreibeEin(name);
        System.out.println(name + " hat gerade die die Zeitansage gehört: 
    [Datum/Uhrzeit]: " + Ansager);
        Zeitansager.trageAus(name);
    }
}

class Zeitansager {
    private static String datumString;
    private static ArrayList<String> abonnenten;

    Zeitansager(String datumString) {
        Zeitansager.datumString = datumString;
        abonnenten = new ArrayList<>();
    }

    static void schreibeEin(String name) {
        abonnenten.add(name);
    }

    static void trageAus(String name) {
        abonnenten.remove(name);
    } 


    static void sagAn() {
        SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.YYYY' 'HH:mm:ss");
        String datum = sdf.format(new Date());
        datumString = datum;
        for (int i=1; i <= abonnenten.size(); i++) {
            abonnenten.update();
        }
    }
    static String getZeit() {
        return datumString;
    }
}

未调用更新功能

2 个答案:

答案 0 :(得分:4)

  1. 您在ArrayList中的Zeitansager必须是Zuhoerer类型,而不是String

  2. 然后在sagAn()的循环中您需要调用:

            abonnenten.get(i).update();

代替:

            abonnenten.update();
  1. 最后,您的方法static void schreibeEin(String name)实际上应该以{{1​​}}作为参数。

答案 1 :(得分:1)

要在每次创建对象时运行“更新”函数,必须在构造函数中调用此函数。像这样:

Zuhoerer(String name) {
    this.name = name;
    update();
}

您打算如何处理您的数组列表?给我更多详细信息,以便我可以帮助您。