Использование переопределенного метода toString в возвращенном отсортированном ArrayList не учитывает символы новой строки - PullRequest
1 голос
/ 18 апреля 2020

У меня есть класс событий, в котором есть информация о таких событиях, как имя, местоположение, цена билета и т. Д. c. У меня также есть класс календаря, единственной переменной экземпляра которого является ArrayList событий, которые к нему добавляются.

Мой метод toString:

public String toString() {
    String s = new String();
    for (int i = 0; i < calendar.size(); i++) {
        s = s + "\nEvent Name: " + calendar.get(i).getEventName() + " || Event Venue: "
                + calendar.get(i).getEventVenue() + " || Date: " + calendar.get(i).getDate() + " || Tickets Sold: "
                + calendar.get(i).getTicketsSold() + " || Ticket Price: " + calendar.get(i).getTicketPrice()
                + " || Overhead: " + calendar.get(i).getOverhead();
    }
    return s;
}

Основной метод:

public class EventTester {

    public static void main(String[] args) {
        Event e1 = new Event("Birthday", "Hotel", "2020-04-12", 100, 100, 1000);
        Event e2 = new Event("Easter", "Park", "2020-07-28", 200, 200, 2000);
        Event e3 = new Event("Christmas", "Garage", "2020-03-28", 300, 300, 3000);
        TRAPSCalendar tpc = new TRAPSCalendar();

        tpc.add(e1);
        tpc.add(e2);
        tpc.add(e3);

        System.out.println(tpc.toString());
        System.out.println(tpc.sortByDate().toString());
    }

}

Это работает как задумано, когда я просто использую его на объекте календаря после добавления событий:

Вывод первого отпечатка:

Название события: Birthday || Место проведения мероприятия: Отель || Дата: 2020-04-12 || Билеты проданы: 100 || Стоимость билета: 100 || Накладные расходы: 1000 Название мероприятия: Пасха || Место проведения: Park || Дата: 2020-07-28 || Билеты проданы: 200 || Цена билета: 200 || Накладные расходы: 2000
Название мероприятия: Рождество || Место проведения мероприятия: Гараж || Дата: 2020-03-28 || Билеты проданы: 300 || Стоимость билета: 300 || Накладные расходы: 3000

Проблема заключается в том, что я использую один из моих методов сортировки в ArrayList, а затем использую метод toString () в отсортированном возвращенном ArrayList. Он не вставит новые строки, поэтому я получаю одну длинную строку для отсортированных событий, которая по некоторым причинам заключена в квадратные скобки.

Вывод второго вывода:

[Имя: Рождество || Место проведения: Гараж || Дата: 2020-03-28 || Билеты проданы: 300 || Стоимость билета: 300 || Накладные расходы: 3000, имя: день рождения || Место проведения: Отель || Дата: 2020-04-12 || Билеты проданы: 100 || Стоимость билета: 100 || Накладные расходы: 1000, имя: пасха || Место проведения: Парк || Дата: 2020-07-28 || Билеты проданы: 200 || Цена билета: 200 || Накладные расходы: 2000]

Мне нужно создать GUI, чтобы отобразить список событий, чтобы после сортировки его важное значение отображалось на новой строке. Кроме того, исходный порядок списка необходимо поддерживать отдельно от отсортированной версии, которая будет отображаться.

1 Ответ

0 голосов
/ 18 апреля 2020

Я полагаю, что метод sortByDate не возвращает тип TRAPSCalendar (поэтому ссылка this), а вместо этого возвращает отсортированный Collection. Таким образом, ваш второй toString вызывается не в вашем календаре, а в самой отсортированной коллекции. Вот почему вы получили этот результат (в скобках).

Решения:

 System.out.println(tpc.toString());
 tpc.sortByDate();
 System.out.println(tpc.toString());

или измените sortByDate, возвращая текущий объект календаря (return this) вместо отсортированной коллекции .

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