Java Array List получить - PullRequest
       3

Java Array List получить

1 голос
/ 18 марта 2012

Я пытаюсь заставить эту программу получать пароли из списка массивов.

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

за второе, что я попробовал.

Конкретная комбинация цифра / буква, похоже, меняется при каждом запуске программы. Есть ли способ указать, какую строку отображать из списка массивов?

Ответы [ 5 ]

3 голосов
/ 18 марта 2012

Переопределить toString() в классе Person

3 голосов
/ 18 марта 2012

То, что вы видите, это строка, возвращаемая методом toString () объекта по умолчанию, который представляет собой имя класса, за которым следует его хеш-код. Вы захотите переопределить этот метод и дать классу Person достойное переопределение метода toString().

например.,

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

Редактировать: если вы хотите отобразить только одно поле в выходных данных, используйте хорошее решение Дэйва Ньютона (1 +).

1 голос
/ 18 марта 2012

реализация по умолчанию при печати списка заключается в вызове toString для всех объектов в этом списке. и поскольку вы не переопределяете метод toString, он будет вызывать метод toString из класса Object по умолчанию, который будет печатать 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());
}
1 голос
/ 18 марта 2012

Да;напечатать свойство объекта, которое вы хотите увидеть:

out.println(people.get(0).getFirstName());
0 голосов
/ 18 марта 2012

В первом операторе печати вы пытаетесь напечатать объект .. именно поэтому вы всегда видите разные комбинации цифр / букв ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...