2015-05-09 101 views
-1

背景:我在Java中玩弄。我创建了一个名为Animal的类,它跟踪名称,年龄,性别和numberOfAnimals Created。它有构造函数,访问器方法,printNumAnimals(输出静态变量numberOfAnimals)和printAnimals(输出实例变量值)的方法。使用对象作为类型的ArrayList

当我在我的Main方法中实例化一个新的Animal对象时,我可以使用构造函数或set方法来设置实例变量的值。一切运作良好!

问题:当我创建一个动物对象ArrayList它的作品。它创建了ArrayList,但是当我输出时,它将对动物对象的引用输出为:[[email protected][email protected][email protected]],而不是单个字段值。正如你在下面的代码中看到的那样,我做了一个简单的动物sysout,它是ArrayList。我知道我可以设置一个迭代器来遍历ArrayList,但我想输出字段的值,而不仅仅是对对象的引用。我怎样才能做到这一点?

我正在省略Animal类代码,因为这是一个非常简单的类,带有私有字段和公共getter和setter。请参阅下面的主要类别:

import java.util.ArrayList; 

import animal.Animal; 

public class Main { 

    public static void main(String[] args) { 

     /* 
     Animal animal= new Animal(); 
     animal.setName(""); 
     animal.setAge(-2); 
     animal.setSex("Jake"); 

     animal.printAnimal(); 
     Animal.printNumAnimals(); 
     */ 

     ArrayList<Animal> animals = new ArrayList<Animal>(); 

     Animal animal; 

     animal = new Animal(); 
     animal.setName("Fido"); 
     animal.setAge(3); 
     animal.setSex("Male"); 
     animals.add(animal); 

     animal = new Animal(); 
     animal.setName("Fifi"); 
     animal.setAge(1); 
     animal.setSex("Female"); 
     animals.add(animal); 

     animal = new Animal(); 
     animal.setName("Jake"); 
     animal.setAge(2); 
     animal.setSex("female"); 
     animals.add(animal); 

     Animal.printNumAnimals(); 
     System.out.println(animals); 

    } 

} 
+0

http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#toString%28 %29 –

+0

嗨JB,我很抱歉,如果这是重复的。我搜索了知识库并找不到解决方案。我可能搜索不正确。感谢您提供api文档的链接。这也帮助 –

回答

2

您必须重写Animal#toString()方法。

你可能有这样的事情在你的Animal类:

@Override 
public String toString() { 
    return String.format("Animal: name=%s, age=%s, sex=%s", name, age, sex); 
} 
+1

老兄,非常感谢你! toString方法的覆盖做到了!你是明星! –

+0

没问题,很乐意帮忙。 – samouray

相关问题