2015-05-09 141 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

相關問題