1
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 的一个实例。(链接列表是一个出租列表,其中包含一个视频链接列表)

没有错误被抛出......它有点难以解释,如果您需要更多信息,请告诉我,我会澄清。

我很茫然,可能是因为我没有正确地遍历我的链表?

4

4 回答 4

3

代替

if (cust.getName() == rentals.get(i).getRentee().getName()){

经过

if (cust.getName().equals(rentals.get(i).getRentee().getName())){

您不能将字符串与==(除非您的算法可以确保这是同一个实例,但几乎从来没有这种情况)。

但失踪equals并不是唯一的错误。它可能在内部getRented()或其他地方(你没有展示你用toReturnand做什么toDelete,所以不清楚你是否在这里没有问题)。

现在,要继续追逐你的错误,你应该要么

  • 调试,并在循环中放置一个断点以检查此时的状态rentals.get(i)和执行情况
  • 如果不能调试,就放很多System.println,这样你就知道你有什么了...
于 2012-10-01T19:44:04.910 回答
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;
    }
}
于 2012-10-01T19:55:18.133 回答
1

我赞成dystroy的答案,因为不正确的字符串比较总是错误的。

但是因为这会以不同的方式失败(客户姓名与承租人姓名不匹配),我想知道您的问题是否真的是由以下任一原因引起的:

  1. 有问题getRented();或者
  2. cust 在通话时有一个空名称,这将匹配具有空名称的 Rentee。
于 2012-10-01T20:03:21.670 回答
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); 
    } 
} 
于 2012-10-01T20:18:27.360 回答