【问题标题】:Numbering with arraylists and lists用数组列表和列表编号
【发布时间】:2015-03-27 05:04:59
【问题描述】:

所以我在同一个类中都有以下代码

List<Person> peopleList = new ArrayList<Person>();

private void viewPersons() {
    if (peopleList.isEmpty()) {
        System.out.println("No persons to display");
    }
    if (peopleList.isEmpty()!= true) {
        //for(int i = 0; i <= peopleList.size(); i++) {
        System.out.println(peopleList);
        //}
    }
}

还有一个名为 Person 的类,该数组包含对它的引用。

我从用户输入中获取值,这并不重要或问题,但是当此方法运行时(假设我有 Jon、4110987654 和 jjon@gmail.com 作为三个字符串的用户输入)我得到

“[Person@55f96302 Jon, 4110987654, jjon@gmail.com] 作为它的输出。”

如果我输入另一个人的信息,我会在一行中得到所有信息。它看起来像

"[Person@55f96302 Jon, 4110987654, jjon@gmail.com, Person@3d4eac69, 姓名、电话、电子邮件]"

但我想要的是

“Person@55f96302 乔恩, 4110987654, jjon@gmail.com

Person@3d4eac69、姓名、电话、电子邮件"

如何将它们分开,以便每个人的信息在不同的行上,而"Person@55f96302" 只是一个数字,例如 1 或 2?

我只是不确定应该添加什么语法或应该改变什么。

这是 Person 类中的 toString()

public String toString(){
    StringBuilder builder = new StringBuilder();
    builder.append(super.toString()).append(" ");
    builder.append(fullName).append(", ");
    builder.append(phoneNumber).append(", ");
    builder.append(email).append(" ");
    return builder.toString();
}

【问题讨论】:

  • 适当覆盖PersontoString()方法
  • 而不是if (peopleList.isEmpty()!= true),您可以简单地说为else
  • 你能展示一下 Person 类吗?您的输出似乎不可能。如果您没有在 Person 类中覆盖 toString(),它应该只显示 [Person@55f96302, Person@3d4eac69]
  • 如果没有看到 Person 类的 getter,我们无法为您提供准确的解决方案。

标签: java arraylist printing


【解决方案1】:

您得到了上面提到的输出,因为您试图直接打印 ArrayList,其中包含 Person 对象,而 toString() 没有功能。试试这个代码:

List<Person> peopleList = new ArrayList<Person>();

private void viewPersons() {
    if (peopleList.isEmpty()) {
        System.out.println("No persons to display");

    } else {
        for (Person p : peopleList) {
            // you can override Person.toString() however you want
            System.out.println(p.toString());
        }
    }
}

【讨论】:

    【解决方案2】:

    您可以覆盖 java.lang.Objects 类的 toString() 方法来格式化您的列表输出。

    【讨论】:

      【解决方案3】:

      您有以下选项以您预期的方式打印。

      1. 您可以按照 Tim Biegeleisen 在他的回答中提到的那样进行迭代。这对这个来说很简单。如果您只在这个地方而不是代码中的其他任何地方打印这样的内容。

      2. 如果您要在多个地方都需要这种类似的打印需求,那么您必须重写 ArrayList 的 toString() 方法。

      【讨论】:

        【解决方案4】:

        peopleList 是数组列表。 以您提到的格式打印 arraylist 的内容 您必须使用 for 每个循环和 toString() 方法。 toString() 方法来自您需要覆盖的对象类。 您可以使用下面的修改代码

        List<Person> peopleList = new ArrayList<Person>();
        
        private void viewPersons() {
           if (peopleList.isEmpty()) {
                System.out.println("No persons to display");
           }
           else{
               //use of for each loop
               for(Person per : peopleList){ 
                //override toString() method
                System.out.println(per.toString());
               }
           }
        }
        

        【讨论】:

          猜你喜欢
          • 2018-03-02
          • 2017-09-05
          • 1970-01-01
          • 2011-12-02
          • 1970-01-01
          • 2023-04-06
          • 2010-10-19
          • 2016-06-19
          • 1970-01-01
          相关资源
          最近更新 更多