【问题标题】:Printing ArrayList<String> into output? [duplicate]将 ArrayList<String> 打印到输出中? [复制]
【发布时间】:2016-08-22 07:05:12
【问题描述】:

所以,我有存储动物的 ArrayList。

private ArrayList<Animal> catalog = new ArrayList<>();

现在,当我在输出中按 4 时,我需要将目录打印到输出中。

case 4:
                System.out.println("List of animals: ");
                printIt();   //Function to print catalog
                break;

我试着用

    private boolean InList(String name) {
    for (int i = 0; i < catalog.size(); i++) {
        if (name.equalsIgnoreCase(catalog.get(i).getName())) {
            return true;
        }
    }
    return false;
}

但它不起作用。你们能帮我得到这段代码吗?

【问题讨论】:

  • 你为什么不尝试打印动物列表?
  • 请发printItInList 有什么相关性?
  • 当我尝试只打印存储动物的“目录”时,我会得到“[animalcatalogjava.Animal@33909752]” printIt is here private String printIt(){ String animal = name; //catalog.add();返回动物; }

标签: java arraylist printing


【解决方案1】:

如果您希望它返回一个字符串,请执行类似的操作。

String printIt(ArrayList<Animal> animals) {
String temp = "";
for(Animal animal : animals) {
temp += animal.getName() + "\n";
}
return temp;
}

虽然我认为没有必要,但请立即打印。

void printIt(ArrayList<Animal> animals) {
for(Animal animal : animals) {
System.out.println(animal.getName());
}
}

【讨论】:

  • 谢谢。使用第二个选项。你是对的,更好的一个:p
【解决方案2】:

定义一个打印的方法可能太多了,你可以这样做

System.out.println("List of animals: "+ catalog );

但为此,您必须覆盖动物类中的toString 方法...

如果你不覆盖它,你会得到类似的打印结果

[animalcatalogjava.Animal@33909752]

这是对象的默认字符串...

类似于以下格式:

package.class@hashcode..

【讨论】:

  • 谢谢。不完全确定“如何覆盖”toString,但它现在可以工作了。
【解决方案3】:

您需要重写 toString() 方法来打印对象的用户友好名称,它有助于调试。

equals() 方法比较两个动物对象是否相同。

有关如何或何时覆盖 Object 类方法的更多信息https://docs.oracle.com/javase/tutorial/java/IandI/objectclass.html

【讨论】: