2017-06-13 73 views
0

当我的程序来到这个方法时,它似乎永远不会更新目标值。如果输入“dave”,则无论调用多少次该方法,它都将保持“dave”。我的链表没有返回正确的值或正确更新列表

public Person lookup(String name){ 
    if(firstPerson == null){ 
      return null; 
     } 
    Person target = null; 
    for (target = firstPerson; target != null; target = target.nextPerson){ 
     if(name.equals(target.name)){ 
       return target; 
      } 
      else { 
       return null; 
      } 
     } 
     return target; // replace this line 
    } 

如果我通过这个addFriend方法添加好友,firstFriend将最终打印最后添加的名字。如果输入的名字是rob bill和travis 输出将是travis travis travis。

public void addFriend(Person friend){ 
     firstFriend = new Friend(friend, firstFriend); 
    return; // replace this line 


public String friendString(){ 
    String friendList = ""; 
    if(firstFriend == null){ 
     return null; 
     } 
    for(Friend pointer = firstFriend; pointer != null; pointer = pointer.nextFriend){ 
      friendList = friendList + firstFriend.who.name + " "; 
     } 

    return friendList.trim(); // replace this line 
} 
+3

你的查找方法中提到的其他部分不正确。不应该有别的声明。如果它通过整个for循环而没有找到“target”,它应该返回null。 – Compass

+0

谢谢@Compass。那么如果我遍历列表而没有找到目标,我的最终返回值是否为空? –

+0

是的。在合同模型中,您的合同是*返回目标,如果找到*,如果找不到,则返回null。您提供的模型改为遵守合同*返回目标,如果它是第一个在列表中,否则返回null *。 – Compass

回答

1

您总会在循环的第一次迭代中返回。如果找到该人员,则返回(if分支),如果不是,则返回nullelse分支)。相反,你应该继续迭代,直到找到正确的人或耗尽列表。第一个条件,顺便说一句,是循环的一个子集(如果firstPersonnull目标只会成为null立即),并且还可以(应该!)被删除:

public Person lookup(String name){ 
    Person target = null; 
    for (target = firstPerson; target != null; target = target.nextPerson) { 
     if (name.equals(target.name)) { 
       return target; 
     } 
    } 
    return target; // Or null explicitly - matter of taste. 
} 
+0

谢谢!非常感谢您的意见! –

0
if(name.equals(target.name)){ 
      return target; 
     } 
     else { 
      return null; 
     } 

的其他部分需要走开。这段代码的效果是,它只检查第一个值,如果它不是你想要查找的值,它就马上出来。

变化

return target; // replace this line 

return null; 和删除上述

+0

非常感谢您的意见。 –