我是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。我是德国人,抱歉我的英语不好;)
答案 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()
将是一种更好的方法,然后为执行相同的工作提供自定义方法,除非您正在对数据进行一些额外/特殊格式化。