【问题标题】:Printing Objects in an ArrayList打印 ArrayList 中的对象
【发布时间】:2020-08-09 20:12:10
【问题描述】:

该项目需要我创建一个对象的 ArrayList,然后打印完整的列表。此外,最大字符数不能超过 280。创建的对象在我的“消息”类中定义,列表在我的 MessagingService 类中定义和处理。我无法理解为什么 MessagingService 类不能返回定义的完整 ArrayList。它只是什么都不返回。我添加了另外两种打印方式来测试是否成功添加到列表中。

消息类:

import java.util.Objects;

public class Message {

    private String sender;
    private String content;

    public Message(String sender, String content) {
        this.sender = sender;
        this.content = content;
    }

    public String getSender() {
        return sender;
    }

    public String getContent() {
        return content;
    }

    public String toString() {
        return this.sender + ": " + this.content;
    }

    public boolean equals(Object obj) {
        if (this == obj) {
            return true;
        }
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final Message other = (Message) obj;
        if (!Objects.equals(this.sender, other.sender)) {
            return false;
        }
        if (!Objects.equals(this.content, other.content)) {
            return false;
        }
        return true;
    }

}

MessagingService 类:

import java.util.ArrayList;

public class MessagingService {

    private ArrayList<Message> messages;

    public MessagingService() {
        this.messages = new ArrayList<>();
    }

    public void add(Message message) {
        if (message.toString().length() <= 280) {
            this.messages.add(message);
        }
    }

    public ArrayList<Message> getMessages() {
        System.out.println("For each print method:");
        for (Message message : messages) {
            System.out.println(message);
        }
        System.out.println("");

        System.out.println("Println complete list method:");
        System.out.println(this.messages);
        System.out.println("");

        System.out.println("Return print method:");
        return this.messages;
    }
}

主类:

public class Main {

    public static void main(String[] args) {
        Message test1 = new Message("pieterer", "aaaaaaaaaa1111111111bbbbbbbbbbaaaaaaaaaa1111111111bbbbbbbbbbaaaaaaaaaa1111111111bbbbbbbbbbaaaaaaaaaa1111111111bbbbbbbbbbaaaaaaaaaa1111111111bbbbbbbbbbaaaaaaaaaa1111111111bbbbbbbbbbaaaaaaaaaa1111111111bbbbbbbbbbaaaaaaaaaa1111111111bbbbbbbbbbaaaaaaaaaa1111111111bbbbbbbbbb");
        Message test2 = new Message("koos", "kaaskril");
        Message test3 = new Message("jan", "wikkelspies");
        MessagingService list = new MessagingService();
        System.out.println("");
        list.add(test1);
        list.add(test2);
        list.add(test3);
        list.getMessages();
    }
}

练习的链接可以在这里找到: https://java-programming.mooc.fi/part-6/1-objects-within-objects

【问题讨论】:

  • 问题是?听起来像是作业或代码审查...
  • 您能否更具体地说明什么不起作用? getMessages() 方法是返回一个 empy ArrayList 还是什么?
  • 我按原样运行了您的代码及其打印。返回消息后您想要做什么,您没有在任何地方存储/使用它
  • 我很抱歉没有更具体。将代码上传到 Moocfi 服务器时,它声明:当向消息服务添加一条包含 280 个字符的消息时,MessagingService 的 getMessages 方法应该返回一个包含一条消息的列表。预期: 但为: 调用时,方法 public ArrayList getMessages() 应该只返回 ArrayList,该方法中的所有其他代码都是我的测试。我的问题是它为什么不返回任何东西?
  • 它打印出hi For each print method: pieterer: aaaaaaaaaa1111111111bbbbbbbbbbaaaaaaaaaa1111111111bbbbbbbbbbaaaaaaaaaa1111111111bbbbbbbbbbaaaaaaaaaa1111111111bbbbbbbbbbaaaaaaaaaa1111111111bbbbbbbbbbaaaaaaaaaa1111111111bbbbbbbbbbaaaaaaaaaa1111111111bbbbbbbbbbaaaaaaaaaa1111111111bbbbbbbbbbaaaaaaaaaa1111111111bbbbbbbbbb koos: kaaskril jan: wikkelspies Println complete list method: [pieterer: aaaaaaaaaa111...., koos: kaaskril, jan: wikkelspies] Return print method 你期待什么

标签: java object arraylist return tostring


【解决方案1】:

这里,MessagingService 正在返回列表,但您没有在 main() 中打印它。 将 main() 中的 list.getMessages() 行替换为 System.out.println(list.getMessages())。

你也可以替换:

public ArrayList<Message> getMessages() {
        System.out.println("For each print method:");
        for (Message message : messages) {
            System.out.println(message);
        }
        System.out.println("");

        System.out.println("Println complete list method:");
        System.out.println(this.messages);
        System.out.println("");

        System.out.println("Return print method:");
        return this.messages;
    }

下面的代码:

@Override
public String toString() {
    return new ReflectionToStringBuilder(this,ToStringStyle.SHORT_PREFIX_STYLE).toString();}

【讨论】:

    【解决方案2】:

    我找到了解决方案: 在 add() 方法中,该行是: if(message.toString().length()

    【讨论】:

      猜你喜欢
      • 2016-12-19
      • 2014-12-11
      • 1970-01-01
      • 1970-01-01
      • 2019-01-04
      • 2018-05-03
      • 1970-01-01
      • 2022-01-09
      相关资源
      最近更新 更多