Java 已更改LinkedList的元素-需要更改其余元素
我的节目是一个显示城市和到达和离开时间的火车时刻表。 在程序中,您可以键入“Delay”,然后键入城市名称和#of minutes,以分钟为单位将延迟添加到城市到达时间中。这些信息都存储在链接列表中Java 已更改LinkedList的元素-需要更改其余元素,java,Java,我的节目是一个显示城市和到达和离开时间的火车时刻表。 在程序中,您可以键入“Delay”,然后键入城市名称和#of minutes,以分钟为单位将延迟添加到城市到达时间中。这些信息都存储在链接列表中 Station Arrival Departure Day Vancouver ----- 20:30 1 Kamloops 06:00
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
}
}
}
然而,正是在这一点上,我必须将这些相同的分钟数添加到列表上的其余时间中,但不能在延迟实施之前将这些更改应用到城市
例如,如果我输入“Edmonton”和“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
(我会在我工作的第二天找出如何更新时间)
我不知道如何循环执行此操作,并将分钟更新应用于列表的其余部分,同时排除选定城市之前的元素。我能想到的任何循环的想法都会贯穿整个列表。
思想?我应该查找的概念/谷歌?
提前感谢。我相信您可以使用布尔标志来实现这一点
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”
并调用布尔edmontonUpdated
变量更好-但您可以自己完成:)您可以使用以下修改后的代码更新在添加延迟的城市/车站之后到达的城市/车站的到达时间:
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)
块中插入更新日期的逻辑。希望这有帮助。如果您有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));
}
公共无效延迟(字符串站,整数分钟){
int index=ListUtils.indexOf(schedule,object->object.getCity().equals(station));
如果(索引==-1){
返回;
}
List updatedStations=schedule.subList(索引,schedule.size()-1);
updatedStations.forEach(s->s.getArrival().add(分钟,分钟));
}
oops永远不要使用==来比较对象,除非您知道要比较的是引用,而不是内容(事实并非如此)here@NicolasFilotto你说得对,很快就忘了:)。谢谢看来这对我有用。我也会用这个更新剩下的时间。谢谢!但此代码不会更新链表中的原始对象。如果需要,请确保使用新时间设置它,例如:list.setArrivalTime()
(或代码中用于到达时间的setter方法)。