2015-04-26 3 views
1

Я стараюсь практиковать и улучшать создание объектов и их эффективное использование. Для практики я создал класс под названием Person и внутри этого класса, я определяю, что у каждого человека есть имя, фамилия и возраст. У меня есть методы, позволяющие другим классам устанавливать имя, фамилию и возраст человека, а затем возвращать эти значения. Вот где я застрял. Я хотел бы иметь возможность сделать все это, взять имя и фамилию с возрастом, но сохранить это где-нибудь, чтобы позже я мог его использовать. Пример составляет список учеников для школьного курса. Я хотел бы иметь возможность взять и сохранить этот класс Person конкретным объектом в массиве или чем-то рядом с этими строками. Я попытался сделать это, используя ArrayList, но по какой-то причине он не выводится правильно. Любая помощь? благодаря!Сохранение объекта для последующего использования

import java.util.ArrayList; 

public class Main { 

    public static void main(String[] args) { 

     Person definePerson; 
     String name; 
     int age; 
     ArrayList<Person> persons = new ArrayList<Person>(); 

     definePerson = new Person(); 
     System.out.print("Please Enter the first name: "); 
     name = definePerson.enterFirst(); 
     System.out.print("Please Enter the last name: "); 
     name = definePerson.enterLast(); 
     System.out.print("Please Enter their age: "); 
     age = definePerson.enterAge(); 
     persons.add(definePerson); 
     System.out.println("The Person ArrayList is: " + persons.toString()); 

    } 
} 
+0

Какой выход? –

+0

@AnubianNoob the out is: [Person @ 5c647e05] –

+0

@ AndréFecteau вы переопределили метод 'toString'? –

ответ

3

Проблема в том, что Java не знает, как преобразовать объект Person в отображаемую строку. Для этого вам нужно написать метод toString.

Вот пример:

@Override 
public String toString() { 
    return name + ": " + age + " years old."; 
} 

Этот метод должен быть в вашем лице классе, так что ArrayList объект знает, как вывести свой объект.

Вот документация по toString методу из AbstractCollection.java:

Возвращает строковое представление этой коллекции. Строковое представление состоит из списка элементов коллекции в том порядке, в котором они возвращаются его итератором, заключенным в квадратные скобки («[]»). Смежные элементы разделяются символами «,» (запятая и пробел). Элементы преобразуются в строки как на String.valueOf(Object).

+0

Удивительно, что работает спасибо! сохранит этот код для дальнейшего использования. –

+0

Рад, что я могу помочь! –

3

Вы должны переопределить метод toString() в своем классе Person.

класс Person

class Person{ 
String name; 
int age; 

public String toString(){  
    return "person's name"+name+"person's age"+age;  
} 
+0

спасибо! это именно то, что нужно. –

0

ArrayList.toString не выводить элементы в списке, вы должны итерируем ArrayList и распечатать элементы, содержащиеся внутри.

+0

Не правда: http://docs.oracle.com/javase/7/docs/api/java/util/AbstractCollection.html#toString() –

+1

Выполнение этого по-прежнему дает мне результат: Person @ 5c647e05 со следующим кодом : 'for (int i = 0; i

+0

Это даст вам выход, но это не лучшая практика. Каждый раз, когда вы должны запускать цикл для печати объекта person. – underdog

Смежные вопросы