2017-01-27 74 views
0

所以我有一個叫Persons的類,它有一個在main中創建時添加Person對象的方法。如何從main添加對象到ArrayList?

import java.util.*; 

public class Persons { 

public ArrayList<Person> personsList = new ArrayList<Person>(); 

    public boolean addPerson(Person newPerson) { 
     personsList.add(newPerson); 
     return true; 
    } 
} 

這是我的主要方法

import java.util.*; 

public class testPersons { 

public static void main(String[] args) { 

Persons persons = new Persons(); 

    Address person1Address = new Address(xxx, "xxx", "xxx", "CA", "xxx"); 
    Address person1JobAddress = new Address(1542, "High St", "Santa Cruz", "CA", "94063"); 
    ArrayList<String> person1Phone = new ArrayList<String>(); 
    person1Phone.add("xxx-xxx-xxx"); 
    Job person1Job = new Job("Teacher", 25000.00, person1JobAddress); 
    Person person1 = new Person("xxxxxxx", "San Mateo", 'M', person1Address, person1Job, person1Phone); 

    persons.addPerson(person1); 

    System.out.println(persons); 
    } 
} 

所以我的問題是,「我怎麼會添加對象Persons1到我的ArrayList人員上課嗎?」它確實可以編譯,但是當我運行它的時候,我得到了很奇怪的亂碼。是否我在我的Persons類中缺少一些東西,主要的還是我不能象我那樣在ArrayList中打印對象?

+0

打印的對象,默認情況下顯示,將只打印'的hashCode()'的對象。如果你想讓它遍歷對象並打印它包含的所有對象,你需要編寫代碼來完成它。 –

+0

您打印「Persons」的「默認」結果。一般的建議是重寫'toString',我個人覺得這是一個壞主意,'toString'應該保留用於調試。在你的情況下,你可以遍歷'personsList'而不是 – MadProgrammer

+0

爲什麼地球上應該保留'toString()'來保存調試? –

回答

0

確保您所有的Person相關類包括Person都覆蓋默認的toString()。

當你的System.out.println(人),發生這種情況:

  • 在ArrayList中的Person對象稱爲一個接一個。
  • 對於每個Person對象,其toString()是調用方法。如果toString()未被覆蓋,則將調用Object(默認)toString。因此,「怪異的胡言亂語」。你需要告訴Java的是什麼樣的「演示」你想通過覆蓋toString()