因此,项目的一部分方法要求我检查E元素是否已经在节点列表中。如果没有,那么我将元素添加到列表并返回true(因为方法是类型boolean)。但是,我的JUnit测试类中一直出现错误。所以我想知道我的代码目前有什么问题。这是方法:
public boolean add(E element)
{
for(Node ref = first; ref != null; ref = ref.next)
{
first = new Node(element);
if(!(element.equals(ref.data)))
{
n++;
add(element);
return true;
}
else if(element.equals(ref.data))
{
return false;
}
}
return false;
}
我很确定我格式化代码的方式是错误的。我不熟悉节点,因为我使用数组,因此这就是代码可能是一种耻辱的原因。顺便说一句,n是大小。
答案 0 :(得分:1)
您的方法似乎将递归方法和迭代方法结合起来进行搜索,并且在任何情况下都不处理将新元素实际添加到列表中。
你没有指定新元素的添加位置(正面或背面),所以我假设正面。我还假设代码中的first
是您班级的一个字段,因为它不会被声明。
递归解决方案在这里没有多大意义,并且在这种情况下我没有任何优势。所以这是一个迭代解决方案,如果没有找到,它会将新元素放在前面:
public boolean add(E element)
{
for (Node ref = first; ref != null; ref = ref.next)
{
if (element.equals(ref.data)) {
return false;
}
}
Node newFirst = new Node(element);
newFirst.next = first;
first = newFirst;
return true;
}
答案 1 :(得分:0)
逻辑应该有两个部分:
false
而没有做任何其他操作则转到第2步。true
。这显示在以下代码中:
public boolean add(E element)
{
boolean doesElementExist = false;
//Step 1
for(Node ref = first; ref != null; ref = ref.next)
{
if(element.equals(ref.data))
{
doesElementExist = false;
break;
}
}
//Step 2
if(!doesElementExist) {
// Now we need to add element.
Node newNode = new Node(element);
newNode.next = first;
first = newNode;
doesElementExist = true;
}
return doesElementExist;
}