1

I am trying to get this program to get the passwords from an array list.

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));



   }  

}  

The output is

[Person@1c9b9ca, Person@c4aad3, Person@1ab28fe, Person@105738, Person@ce5b1c, Person@1bfc93a]

or just

Person@1995d80

for the 2nd thing I tried.

The specific number / letter combination seems to change each time the program is run. Is there a way to specify which string to display from the array list?

1
  • You need a "toString()" method on your Person class. Commented Mar 17, 2012 at 20:23

5 Answers 5

3

Override toString() in the Person class

Sign up to request clarification or add additional context in comments.

Comments

3

What you are seeing is the String returned by Object's default toString() method which is the name of the class followed by its hashcode. You will want to override this method and give the Person class a decent toString() method override.

e.g.,

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

Edit: if you only want to display one field in your output, then use Dave Newton's good solution (1+).

1 Comment

Thank you, this helps me better understand overriding.
1

Yes; print the object property you want to see:

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

Comments

1

the default implementation when you print List is to call toString for all objects in this List. and because you don't override toString method, it will call the default toString from Object class, that will print objects hashCode in hexadecimal notation, so you get this result:

Person@1c9b9ca ( classname@hashcode) , and it can be changed every time you execute the application because this hashcode come from memory address of the object).

so one option, is to override toString in your class

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

and call

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

the other option, is to print these attributes when you iterate on the List

for(Person person: persons) {
   System.out.println("Person first name: " + person.getFirstName() + " , Last Name: " + person.getLastName());
}

Comments

0

In the first print statement you are trying to print the object..that is why you always see different number/letter combination..

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.