我正在使用SortedLinkedList或我的班级。我们必须将DoubleSortedLinkedList类更改为通用的SortedLinkedList类。我正在实现一个remove方法,该方法应该在列表中给出一个位置,并将删除给定的索引并返回该节点的值。
以下是给出的代码:
public double remove(int givenPosition)
{
double dataToReturn;
if (givenPosition < 0 || givenPosition >= manyNodes)
{
return -1;
}
if (givenPosition == 0)
{
dataToReturn = head.getData();
head = head.getLink();
}
else
{
DoubleNode previous = head;
for (int i = 0; i < givenPosition - 1; i++)
{
previous = previous.getLink();
}
DoubleNode oneToDelete = previous.getLink();
dataToReturn = oneToDelete.getData();
previous.setLink(oneToDelete.getLink());
oneToDelete.setLink(null);
}
manyNodes--;
return dataToReturn;
}
以下是我尝试将其更改为通用类
时的代码public T remove(int givenPosition)
{
T dataToReturn;
if (givenPosition < 0 || givenPosition >= manyNodes)
{
return -1;
}
if (givenPosition == 0)
{
dataToReturn = head.getData();
head = head.getLink();
}
else
{
Node<T> previous = head;
for (int i = 0; i < givenPosition - 1; i++)
{
previous = previous.getLink();
}
Node<T> oneToDelete = previous.getLink();
dataToReturn = oneToDelete.getData();
previous.setLink(oneToDelete.getLink());
oneToDelete.setLink(null);
}
manyNodes--;
return dataToReturn;
}
我最大的问题是,当给定索引超出列表范围或者列表为空时,方法返回-1,但现在该类是泛型方法我无法转换为文字 - 1所以我很好奇我现在可以返回什么而不是-1。
答案 0 :(得分:1)
作为意见:这取决于具体情况。我在一个更抽象的视图中考虑这个问题,而没有深入研究细节:为什么你会返回-1
。
说,在简化的,更一般的情况下,你有:
public double someOperation(int someArg) {
if (certainConditionSatisfied()) {
return -1;
}
// ...
}
现在必须将其转换为新界面
public T someOperation(int someArg) {
if (certainConditionSatisfied()) {
return ????
}
// ...
}
在这种情况下,我的一般答案是:
由于-1
是一种特殊情况,因此在新的实施中,您可以自由地返回null
。
当然,使用此方法的相应代码也需要更改,以正确处理null
而不是-1
。
但是,在您的特定情况下,我倾向于同意@JohnnyMopp,他在评论中建议抛出IndexOutOfBoundsException
例外。