2012-03-17 175 views
1

我試圖讓這個程序從數組列表中獲取密碼。Java陣列列表獲得

import java.util.ArrayList; 

public class CompanyDatabase { 

public ArrayList<Person> getPeople() { 
    ArrayList<Person> people = new ArrayList<Person>(); 
    String[] u = {"Joe","Stan","Leo","John","Sara","Lauren"}; 
    String[] p = {"pass4321", "asdfjkl", "genericpw", "13579", "helloworld", "companypass"}; 
    for(int j = 0; j < u.length; j++){ 
     Person temp = new Person(u[j],p[j]); 
     people.add(temp); 
    } 
    return people; 
} 
} 

import java.util.ArrayList; 
import java.util.Scanner; 
public class CompanyDatabaseDriver { 
    private static Scanner scan = new Scanner(System.in)); 
    public static void main(String args[]) { 

      CompanyDatabase bcData = new CompanyDatabase(); 
      ArrayList<Person> people = bcData.getPeople();  


      // what i tried 
      System.out.println(bcData.getPeople()); 

      // also tried this 
      System.out.println(people.get(1)); 



    } 

} 

輸出是

 
[[email protected], [email protected], [email protected], [email protected], [email protected], [email protected]] 

或只是

 
[email protected] 

因爲我試過第二件事。

每次程序運行時,具體的數字/字母組合似乎都會改變。有沒有辦法指定從數組列表中顯示哪個字符串?

+0

您需要在Person類中使用「toString()」方法。 – 2012-03-17 20:23:31

回答

3

你所看到的是Object返回的String默認的toString()方法所得到的字符串,它是類的名字後面跟着哈希碼。您將希望重寫此方法,併爲Person類提供不錯的方法覆蓋toString()

例如,

// assuming Person has a name and a password field 
@Override 
public String toString() { 
    return name + ": " + password; // + other field contents? 
} 

編輯:如果你只是想在你的輸出顯示一個字段,然後使用戴夫牛頓很好的解決方案(1+)。

+0

謝謝,這有助於我更好地理解重寫。 – johnrogers 2012-03-17 20:47:46

+0

@johnrogers:不客氣! – 2012-03-17 20:50:19

1

是;打印對象的屬性,你希望看到:

out.println(people.get(0).getFirstName()); 
+0

非常感謝,這就是我需要的! – johnrogers 2012-03-17 20:45:08

0

在您嘗試打印object..that第一個print語句就是爲什麼你總是看到不同的數字/字母組合..

1

打印時的默認實現列表是爲此列表中的所有對象調用toString。因爲你不重寫toString方法,它會調用Object類的默認toString,它將以十六進制的格式打印對象hashCode,所以你得到這個結果:

Person @ 1c9b9ca(classname @ hashcode)和它可以在每次執行應用程序時更改,因爲此哈希碼來自對象的內存地址)。

這麼一個選項,就是覆蓋的toString類

@Override 
public String toString() { 
    return String.format("First name %s, Last name %s", firstName, lastName); 
} 

,並呼籲

System.out.println(yourList); // this will print toString for each object 

的另一種選擇,就是當你迭代的名單

for(Person person: persons) { 
    System.out.println("Person first name: " + person.getFirstName() + " , Last Name: " + person.getLastName()); 
} 
打印這些屬性