Java 在返回的排序ArrayList上使用重写的toString方法赢得';不考虑换行符

Java 在返回的排序ArrayList上使用重写的toString方法赢得';不考虑换行符,java,arraylist,tostring,Java,Arraylist,Tostring,我有一个事件类,它有关于事件的信息,如名称、位置、票价等。 我还有一个calendar类,其唯一的实例变量是添加到其中的事件的ArrayList 我的toString方法: public String toString() { String s = new String(); for (int i = 0; i < calendar.size(); i++) { s = s + "\nEvent Name: " + calendar.get(i).getEv

我有一个事件类,它有关于事件的信息,如名称、位置、票价等。 我还有一个calendar类,其唯一的实例变量是添加到其中的事件的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;
}
当我在添加事件后在calendar对象上使用它时,它会按预期工作:

第一次打印的输出:

活动名称:生日| | |活动地点:酒店| |日期:2020-04-12 | | |门票售出:100 | |票价:100 | |开销:1000 活动名称:复活节活动地点:公园日期:2020-07-28售出门票:200票价:200开销:2000
活动名称:圣诞节| |活动地点:车库| |日期:2020-03-28 | |门票售出:300 | |票价:300 | |开销:3000

问题是,我在ArrayList上使用了一个排序方法,然后在排序后返回的ArrayList上使用了toString()方法。它不会把新行放进去,所以我最后得到了一个长长的输出行,用于排序的事件,出于某种原因,这些事件被封装在括号中

第二次打印的输出:

[名称:圣诞节| |地点:车库| |日期:2020-03-28 | |门票售出:300 | |票价:300 | |开销:3000,名称:生日| |地点:酒店|日期:2020-04-12 |门票售出:100 |门票价格:100 | |开销:1000,名称:复活节|地点:公园|日期:2020-07-12428 |门票售出:200 |]


我需要创建一个GUI来显示事件列表,这样在排序后,每个事件都会显示在一个新行上。另外,列表的原始顺序需要与能够显示的排序版本分开维护。

我认为
sortByDate
方法不会返回
TRAPSCalendar
类型(因此
this
引用),而是返回排序后的
集合。因此,您的第二个
toString
不会在日历上调用,而是在已排序的集合本身上调用。这就是为什么会得到这个结果(带括号)

解决方案:

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

或者通过返回当前日历对象而不是已排序的集合来修改
sortByDate

我认为
sortByDate
方法不会返回
TRAPSCalendar
类型(因此
this
引用),而是返回已排序的
集合。因此,您的第二个
toString
不会在日历上调用,而是在已排序的集合本身上调用。这就是为什么会得到这个结果(带括号)

解决方案:

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

或者通过返回当前日历对象(
returnthis
)而不是已排序的集合来修改
sortByDate

请显示
sortByDate
签名
toString()
不是GUI格式化程序的合适工具;您需要一个独特的“视图”组件,其唯一任务是格式化这些对象以供显示。请显示
sortByDate
签名
toString()
不是GUI格式化程序的合适工具;您需要一个独特的“视图”组件,其唯一任务是格式化这些对象以供显示。
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());
    }

}