我必须创建一个应用程序来管理电影院的广告牌,我有一个标准数据,其中包含电影的标题。我还有一个会话类型数据,它包含int容量、localtime时间、localdate日期和电影。我必须创建一个方法来消除会话,将电影的标题、会话的日期和时间作为参数传递。这个方法在for中的if中失败了。我不知道我做错了什么。会不会是因为我比较localdata和local time类型的数据的方式?
public boolean quitarSesion(String tituloEliminar, LocalDate fechaEliminar, LocalTime horaEliminar)
{
int count=0;
for(Sesion sesion: sesiones){
if(sesion.pelicula.titulo==tituloEliminar && sesion.fecha==fechaEliminar && sesion.hora==horaEliminar){
sesiones.remove(sesion);
System.out.println("Sesion eliminada correctamente");
count++;
}
if(count==0){
System.out.println("No se ha eliminado ninguna sesion");
return false;
}
else{
System.out.println("Sesion eliminada correctamente");
return true;
}
}发布于 2021-05-10 08:00:28
您的代码存在多个问题。
sesion.pelicula.titulo==tituloEliminar
==比较“引用”,这不是你想要的,你想检查字符串是否相等。==不会这样做。你在找sesion.pelicula.titulo.equals(tituloEliminar)。
sesiones.remove(sesion);
在sesiones上循环时,不能从sesiones中删除。记住你想要删除的东西,然后在最后做。或者,不要使用for(:)语法,取而代之的是获取一个迭代器,当您找到想要删除的迭代器时,在它上面调用.remove() (调用var it = sesiones.iterator();,在while (it.hasNext())时替换for循环,用it.next()获取会话,最后如果您的if说:这个需要删除,则调用it.remove()。
如何比较LocalDate和LocalTime
==与.equals的比较,它适用于所有的非原语类型(因此,对于LocalDate和LocalTime,您还需要使用.equals,不要使用==,它不会做您认为它做的事情)。否则,这里就没有问题了。
https://stackoverflow.com/questions/67463188
复制相似问题