我正在尝试让这个程序从数组列表中获取密码。
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));
}
}
输出
[Person@1c9b9ca, Person@c4aad3, Person@1ab28fe, Person@105738, Person@ce5b1c, Person@1bfc93a]
或只是
Person@1995d80
我尝试的第二件事。
每次运行程序时,特定的数字/字母组合似乎都会改变。有没有办法指定从数组列表中显示哪个字符串?
答案 0 :(得分:3)
您所看到的是Object的默认toString()方法返回的字符串,该方法是类的名称,后跟其哈希码。您将希望覆盖此方法,并为Person类提供一个不错的toString()
方法覆盖。
如,
// assuming Person has a name and a password field
@Override
public String toString() {
return name + ": " + password; // + other field contents?
}
编辑:如果您只想在输出中显示一个字段,请使用Dave Newton的良好解决方案(1 +)。
答案 1 :(得分:3)
覆盖toString()
类
Person
答案 2 :(得分:1)
是;打印您想要查看的对象属性:
out.println(people.get(0).getFirstName());
答案 3 :(得分:1)
打印List时的默认实现是为此List中的所有对象调用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
另一个选项是在迭代List
时打印这些属性for(Person person: persons) {
System.out.println("Person first name: " + person.getFirstName() + " , Last Name: " + person.getLastName());
}
答案 4 :(得分:0)
在第一个打印语句中,您正在尝试打印对象..这就是为什么您总是会看到不同的数字/字母组合..