问题从我的LinkedList打印出一个元素

时间:2016-05-26 16:39:39

标签: java

好的,所以我试图从LinkedList打印出一些元素,虽然有些会打印,但有些会抛出异常。我将尝试在我的代码中尽可能清楚地提供多个示例。如果我过火,请提前进行。

我从这个构造函数中创建了一些对象:

public Station(String city, Calendar arrival, Calendar departure, int day)

对象创建示例:

Station stop1 = new Station("Vancouver", null, getCalendar(20,30), 1);  
Station stop2 = new Station("Kamloops", getCalendar(6,00), getCalendar(6,35), 2);
Station stop3 = new Station("Jasper", getCalendar(16,00), getCalendar(17,30), 2);

你从这个方法看到的getCalendar:

private static Calendar getCalendar(int hour, int minute) {
    Calendar c = Calendar.getInstance();
    c.set(Calendar.HOUR_OF_DAY, hour);
    c.set(Calendar.MINUTE, minute);         
    return c;
}   

这使我能够设置出发和到达时间。 那些时间是通过另一个类存储的,然后我有一个getter将它作为一个字符串返回,所以时间看起来合适。这种方法看起来像这样,这里可能出现问题,因为这个例外让我回到这里。

public String getDeparture(){
    String curDTime = String.format("%02d:%02d", this.departure.get(Calendar.HOUR_OF_DAY),this.departure.get(Calendar.MINUTE));
    return curDTime;        
}

因此,如果我只是尝试从我创建的对象中打印出发时间,它会起作用并将时间返回给我。

System.out.println(stop1.getDeparture());

显示:20:30

现在我从这里将所有停靠点添加到LinkedList中 我有一个显示方法来打印LinkedList的元素,如下所示:

public void displaySchedule(){
    System.out.println("Station \t Arrival \t Departure \t Day");       
    for(Station list: schedule){
        System.out.println(list.getCity());     
    }

输出如下:

Station      Arrival     Departure   Day
Vancouver
Kamloops
Jasper
etc..

现在,每当我尝试打印到达和离开日期时,就像这样:

 for(Station list: schedule){
        System.out.println(list.getDeparture());

我得到了

Station      Arrival     Departure   Day
Exception in thread "main" java.lang.NullPointerException
at Station.getArrival(Station.java:35)
at TrainTimeTable.displaySchedule(TrainTimeTable.java:18)
at TrainTest.main(TrainTest.java:50)

我注意到的一件事。当我只打印出发单列​​表时,我没有时间和错误,如上所示,但如果我只打印到达列表,时间将打印,但随后出现错误。 对不起,这太久了。任何人都有关于我应该研究什么的想法? 提前谢谢。

编辑: 所以在我刚发布了我的问题后,我想出了一些东西。第一个到达时间设置为Null,最后一个出发时间设置为Null。这就是为什么一个列表在开头抛出异常而另一个在结尾抛出异常的原因。

编辑2: 我为getArrival添加了另一种方法

public String getArrival(){
    String curATime = String.format("%02d:%02d", this.arrival.get(Calendar.HOUR_OF_DAY),this.arrival.get(Calendar.MINUTE));
    return curATime;        
}

现在我很清楚,我必须设置这些getter来处理我正在使用的两个NULL时间。谢谢!

1 个答案:

答案 0 :(得分:0)

您正在将null传递给getarrival方法并尝试转换它。

Station stop1 = new Station("Vancouver", null, getCalendar(20,30), 1); 

此处到达时为null。在应用任何转换之前,请检查变量是否为空。

    public String getArrival(){
       String curATime =null;
       if(this.arrival!=null)
       {
        curATime = String.format("%02d:%02d",this.arrival.get(Calendar.HOUR_OF_DAY),this.arrival.get(Calendar.MINUTE));             
        }
        return curATime ;    
    }