java - ArrayList 的奇怪输出

标签 java oop object arraylist

<分区>

我是 Java 新手,我对 ArrayList 中的对象有疑问。

我试图将一个带有文本和时间戳的对象放入 ArrayList 中。 一开始它的行为是正确的,所以你可以输入你的笔记,如果你输入“exit”,它会关闭输入并显示 ArrayList 中的所有条目。 但是,如果我输入“exit”,它只会显示以下输出:

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);
    }

}
}

如果有人能告诉我我做错了什么,我很高兴,我愿意对我的代码进行每一次改进。
如果您需要更多信息,请联系我。

谢谢

附言我是德国人,抱歉我的英语不好 ;)

最佳答案

您需要重写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());
}

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

关于java - ArrayList 的奇怪输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32886936/

相关文章:

在新创建的 java.security.cert.X509Certificate 上抛出 java.security.cert.CertificateNotYetValidException

java - 将 PayPal curl 请求转换为 Java 中的 http 请求

java - 使用带有 JavaConfig 的 Spring IoC 配置 AspectJ 方面?

class - 类如何帮助您管理大型应用程序?

database - 使用类和数据库进行编程

javascript - jQuery:如何在事件处理函数中获取事件对象而不将其作为参数传递?

java - 为什么使用此 WSDL 时我的 SOAP 请求始终为空?

php - 面向对象的反面?

javascript - 转换 Symfony2 PHP 实体对象以在 Javascript 中使用

javascript - 我可以在 Javascript 中为我创建的对象创建自定义事件吗?