ArrayList

时间:2015-10-01 11:51:20

标签: java oop object arraylist

我是Java的新手,我遇到了ArrayList中对象的问题。

我正在尝试将一个带有文本和时间戳的对象放在ArrayList中。 在开始时它表现正常,因此您可以键入注释,如果键入“exit”,它将关闭Input并显示ArrayList中的所有条目。 但如果我输入“退出”,它只显示我的输出:

  

Notizblock @ 4c15c0d7

这是我的代码:

import java.util.Date;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Scanner;
import java.util.ArrayList;


class Notizblock {

//heutiges Datum erzeugen
private static String getDateTime() {
    DateFormat dateFormat = new SimpleDateFormat("dd.MM.yyy HH:mm:ss");
    Date datum = new Date();
    return dateFormat.format(datum);
}

private String text;
private String datum;

//Konstruktor
public Notizblock(String text, String datum){
    this.text = text;
    this.datum = datum;
}

public void print() {
    System.out.println("Datum: "+datum+" Text: "+text);
}

public static void main(String[] args) {
    ArrayList<Notizblock> notizen = new ArrayList<Notizblock>();
    Scanner eingabe = new Scanner(System.in);

    while (true) {
        System.out.println("Notiz eingeben:");
        String a = eingabe.next();
        if (a.equals("exit")) {
            break;
        }

        notizen.add(new Notizblock(a, getDateTime()));

    }
    System.out.println("alle notizen:");
    for (Notizblock notiz :notizen ) {
        System.out.println(notiz);
    }

}
}

如果有人能告诉我我做错了什么,我很高兴,我对我的代码的每一项改进都持开放态度。
如果您需要更多信息,请打我。

由于

P.S。我是德国人,抱歉我的英语不好;)

1 个答案:

答案 0 :(得分:3)

您需要覆盖toString方法。 Notizblock是一个自定义类,默认System.out将是对象的classname@hashcode,这就是您所看到的。

覆盖toString后,它会根据您的toString实施内容打印对象的内容。这是一个示例:

@Override
public String toString() {
  return "Notizblock {" +
      "text='" + text + '\'' +
      ", datum='" + datum + '\'' +
      '}';
}

是。您可以调用已定义的现有打印方法。

System.out.println("alle notizen:");
for (Notizblock notiz :notizen ) {
    System.out.println(notiz.print());
}

当您打印(SOUT)任何内容时,会自动调用toString()。这就是为什么覆盖toString()将是一种更好的方法,然后为执行相同的工作提供自定义方法,除非您正在对数据进行一些额外/特殊格式化。