public void returnRental(Customer cust){
Rental toDelete = null; //Rental to be removed from list.
LinkedList<Video> toReturn = null; //List of videos to be added to inventory.
//Find appropriate rental according to customer name.
for(int i = 0; i < rentals.size(); i++){
if(cust.getName() == rentals.get(i).getRentee().getName()){
toReturn = rentals.get(i).getRented();
toDelete = rentals.get(i);
}
}
这里是给我提问的代码片段。我已经在eclipse中调试了它,这最终让我更加困惑。它击中了if,并通过了条件。但是一旦它将值分配给“toReturn”,它就会为它分配一个大小为0的空列表。在哪里检查我的租金链接列表和正确的值是存在的,但由于某种原因它没有正确地分配给我的变量: (“toDelete”也是如此,但这不是一个列表,它是我的类Rental的一个实例。(链表是租借列表,其中包含一个链接的视频列表)
没有错误被抛出...... 它有点难以解释,如果您需要更多信息,请告诉我,我会澄清。
我很茫然,可能是因为我没有正确地遍历我的链表?
答案 0 :(得分:3)
替换
if (cust.getName() == rentals.get(i).getRentee().getName()){
通过
if (cust.getName().equals(rentals.get(i).getRentee().getName())){
您无法将字符串与==
进行比较(除非您的算法可以确保这是相同的实例,但几乎不是这种情况)。
但缺少的equals
并不是唯一的错误。它可能位于getRented()
内或其他地方(您没有显示您对toReturn
和toDelete
的处理方式,因此目前尚不清楚您是否在此处遇到问题。)
现在,继续追逐你的错误,你应该
rentals.get(i)
的状态以及此时的执行答案 1 :(得分:1)
可能您的if
条件不止一次被击中。首先,检查这是否真的发生了。如果是这样,请检查您的逻辑并确定是否要在第一次出现或最后出现时停止(这种情况似乎是后者)。
如果您想在第一次出现时停止,请中断迭代:
for(int i = 0; i < rentals.size(); i++){
if(cust.getName() == rentals.get(i).getRentee().getName()){
toReturn = rentals.get(i).getRented();
toDelete = rentals.get(i);
break;
}
}
答案 2 :(得分:1)
我赞成了dystroy的答案,因为错误的字符串比较总是错误的。
但是因为那会以不同的方式失败(客户名称与租户名称不匹配),我想知道您的问题是否真的是由以下任何一种引起的:
getRented()
中的问题;或答案 3 :(得分:0)
for(int i = 0; i < rentals.size(); i++){
if(cust.getName().equals( rentals.get(i).getRentee().getName())){
toReturn.addAll(rentals.get(i).getRented());
//assumming it returns the list of Video object
toDelete = rentals.get(i);
}
}