Java 已更改LinkedList的元素-需要更改其余元素

Java 已更改LinkedList的元素-需要更改其余元素,java,Java,我的节目是一个显示城市和到达和离开时间的火车时刻表。 在程序中,您可以键入“Delay”,然后键入城市名称和#of minutes,以分钟为单位将延迟添加到城市到达时间中。这些信息都存储在链接列表中 Station Arrival Departure Day Vancouver ----- 20:30 1 Kamloops 06:00

我的节目是一个显示城市和到达和离开时间的火车时刻表。 在程序中,您可以键入“Delay”,然后键入城市名称和#of minutes,以分钟为单位将延迟添加到城市到达时间中。这些信息都存储在链接列表中

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方法)。