我的计划是显示城市以及到达和离开时间的列车时刻表。 在程序中,您可以键入"延迟"然后键入城市名称和#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
(我会弄清楚如何更新工作时间后的第二天)
我不知道如何循环使用并将分钟更新应用于列表的其余部分,同时排除所选城市之前的元素。我能想到的任何循环思想都会遍历整个列表。 思考?概念我应该查找/谷歌? 提前谢谢。
答案 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
变量 - 但您可以自己完成:)