Java没有使用链表正确地为我的变量赋值

时间:2012-10-01 19:41:18

标签: java linked-list loops

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 个答案:

答案 0 :(得分:3)

替换

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

通过

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

您无法将字符串与==进行比较(除非您的算法可以确保这是相同的实例,但几乎不是这种情况)。

但缺少的equals并不是唯一的错误。它可能位于getRented()内或其他地方(您没有显示您对toReturntoDelete的处理方式,因此目前尚不清楚您是否在此处遇到问题。)

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

  • debug,并在循环中放置一个断点来检查rentals.get(i)的状态以及此时的执行
  • 如果你不能调试,就放了很多System.println,这样你就知道你有什么......

答案 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的答案,因为错误的字符串比较总是错误的。

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

  1. getRented()中的问题;或
  2. cust在调用时具有空名称,它将使Rentee与空名称匹配。

答案 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); 
    } 
}