2012-03-17 101 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()); 
} 
打印这些属性