更改了LinkedList的元素 - 需要更改其余

时间:2016-05-27 18:15:05

标签: java

我的计划是显示城市以及到达和离开时间的列车时刻表。 在程序中,您可以键入"延迟"然后键入城市名称和#ofminutes以在几分钟内为该城市到达时间添加延迟。此信息全部存储在 LinkedList

Station        Arrival        Departure      Day            
Vancouver      -----          20:30          1              
Kamloops       06:00          06:35          2              
Jasper         16:00          17:30          2              
Edmonton       23:00          23:59          2              
Saskatoon      08:00          08:25          3              
Winnipeg       20:45          22:30          3 

我的输出就像这样开始^^^

所以在我的延迟'方法我能够调出指定的城市并添加到达时间的分钟,一切都很好。代码如下:

public void delay(String station,int minute){
    String cityDelay=station;
    int timeDelay=minute;
    for(Station list: schedule){
        if (cityDelay.equalsIgnoreCase(list.getCity())){                    
            Calendar c = list.getArrivalDate();                 
            c.add(Calendar.MINUTE, timeDelay);              
            System.out.println(list.getArrival());  //to see if it updated             
        }           
    }               
}

但是,正是在这一点上,我必须在列表的其余时间添加相同的分钟,但是在实施延迟之前没有将这些更改应用到城市。

例如,如果我输入"埃德蒙顿"和" 30",输出应如下所示:

Station        Arrival        Departure      Day            
Vancouver      -----          20:30          1              
Kamloops       06:00          06:35          2              
Jasper         16:00          17:30          2              
Edmonton       23:30          00:29          2              
Saskatoon      08:30          08:55          3              
Winnipeg       21:15          23:00          3 

(我会弄清楚如何更新工作时间后的第二天)

我不知道如何循环使用并将分钟更新应用于列表的其余部分,同时排除所选城市之前的元​​素。我能想到的任何循环思想都会遍历整个列表。 思考?概念我应该查找/谷歌? 提前谢谢。

3 个答案:

答案 0 :(得分:2)

如果你有appache commons集合库,或者你有通过谓词找到元素索引的自己的实现,你可以这样做:

public void delay(String station, int minute) {
    int index = ListUtils.indexOf(schedule, object -> object.getCity().equals(station));
    if (index == -1) {
        return;
    }
    List<Station> updatedStations = schedule.subList(index, schedule.size() - 1);
    updatedStations.forEach(s -> s.getArrival().add(MINUTE, minute));
}

答案 1 :(得分:1)

您可以使用以下修改后的代码来更新添加延迟的城市/电台之后的城市/电台的到达时间:

public void delay(String station,int minute){
String cityDelay=station;
int timeDelay=minute;
boolean updateRest = false;
for(Station list: schedule){
    if (cityDelay.equalsIgnoreCase(list.getCity())){                    
        updateRest = true;          
    }
    if(updateRest){
        Calendar c = list.getArrivalDate();                 
        c.add(Calendar.MINUTE, timeDelay);              
        System.out.println("City: "+list.getCity()+"Updated Arrival time: "+ list.getArrival());  //to see if it updated   
    }
}
updateRest = false;
}

如果您想要更改,也可以插入逻辑以更新if(updateRest)块中的日期。希望这会有所帮助。

答案 2 :(得分:0)

我相信你可以使用布尔标志来实现它。

boolean edmontonUpdated = false;
for(Station list: schedule) {
  if ("Edmontion".equals(list.getCity()) || edmontonUpdated == true) {
    Calendar c = list.getArrivalDate();                 
    c.add(Calendar.MINUTE, timeDelay); 
    edmontonUpdated = true;
  }
}

这只是一个示例代码,您应该使用一些变量而不是"Edmontion"并更好地调用boolean edmontonUpdated变量 - 但您可以自己完成:)