Konstantin18ko
@Konstantin18ko
Стоматолог

Как правильно вытаскивать класс из ArrayList?

Есть два класса:
1. Menu - из которого идет создание нового класса Person.
2. Person - имеет 4 параметра ФИО и ДР.

Класс Menu:
import java.util.ArrayList;
import java.util.Scanner;

/**
 * Created by Free on 23.02.2016.
 */
public class Menu {

    static ArrayList<Person.Person> arrayListPerson = new ArrayList<Person.Person>();

    public static void main (String[] agrs){
        menu();
    }

    public static void menu() {
        System.out.println("1. Создать");
        System.out.println("2. Изменить");
        System.out.println("3. Удалить");
        System.out.println("4. О системе");
        System.out.println("5. Выход");

        Scanner scannerString = new Scanner(System.in);
        String stringMenu = scannerString.nextLine();
        switch (stringMenu){
            case "1":
                Person.Person person = new Person.Person();
                System.out.println("Введите Фамилию: ");
                person.stringFamily = scannerString.nextLine();
                System.out.println("Введите имя: ");
                person.stringFirstName = scannerString.nextLine();
                System.out.println("Введите отчество: ");
                person.stringSecondName = scannerString.nextLine();
                arrayListPerson.add(person);
                System.out.println();
                menu();
                break;
            case "2":
                int intSize = arrayListPerson.size();
                while (intSize != 0){
                    System.out.println(arrayListPerson.get(arrayListPerson.size()-1));
                    intSize--;
                }
                System.out.println();

                menu();
                break;
            case "3":

                System.out.println();
                menu();
                break;
            case "4":

                System.out.println();
                break;
            case "5":
                exit();
                break;
            default:
                System.out.println("Не правильно введен пункт меню");
                System.out.println();
                menu();
                break;
        }
    }

    public static void exit() {
        System.out.println("Программа завершена!");
    }
}

Класс Person:
public class Person {
    public String stringFamily = null;
    public String stringFirstName = null;
    public String stringSecondName = null;
}


При добавлении нового экземпляра класса Person в ArrayList все проходит гладко, но когда прошу вернуть значение через метод .get(), то выходит какая то хрень.

Вывод в консоли:
Person.Person@698b41da
Person.Person@698b41da

Желаемый результат:
Иванов Иван Иванович
Петров Петр Петрович

Как реализовать правильный вывод данных в консоль.
  • Вопрос задан
  • 366 просмотров
Решения вопроса 1
@Elysey
System.out.println(arrayListPerson.get(arrayListPerson.size()-1).stringFamily + " " + arrayListPerson.get(arrayListPerson.size()-1).stringFirstName + " " + arrayListPerson.get(arrayListPerson.size()-1).stringSecondName)
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
zagayevskiy
@zagayevskiy Куратор тега Java
Android developer at Yandex
Это результат вызова метода toString(), унаследованного от Object. То что вы видите - реализация по-умолчанию, Full-qualified-name + @ + адрес объекта в памяти. Вам нужно переопределить этот метод у Person

@Override
String toString() {
    return stringFamily + stringFirstName + stringSecondName;
}


Но не принято использовать toString() для "бизнес-логики" или отображения пользователю. Лучше сделать формат отдельно, считается, что toString() может быть в любой момент изменён и это не должно повлиять на работу приложения.

Ещё пару замечаний по коду:
* B Java не принято писать тип в имени переменной.
* Члены класса не нужно инициализировать null'ами.
* Почитайте про 4p (public, protected, private, package-private).
* Не делайте публичные поля-данные, делайте геттеры и сеттеры. А лучше делайте immutable структуры.
* Почитайте про конструкторы.
* Когда-нибудь вы захотите положить свои Person'ы в HashMap/HashSet. Почитайте про методы equals() и hashCode().
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Drum Pads 24 Ульяновск
от 90 000 до 160 000 ₽
FYM.TEAM Новосибирск
от 100 000 до 120 000 ₽
Mountain Ridge Москва
от 150 000 до 200 000 ₽