我试图在类NumLinkedList中实现NumList的抽象数据类型作为单链表。
public class NumLinkedList implements NumList
{
Node head;
int nItem;
private class Node
{
public Node next;
public double value;
public Node(double i, Node j)
{
value = i;
next = j;
}
}
public NumLinkedList()
{
head = null;
nItem = 0;
}
是我的初始化,我遇到以下方法的问题。
public void print()
{
Node currNode = head;
while(currNode.next != null)
{
currNode = currNode.next;
System.out.println(currNode.value);
}
}
public int size()
{
int size = 0;
Node currNode = head;
while(currNode.next != null)
{
currNode = currNode.next;
size++;
nItem++;
}
return size;
}
public void insert(int i, double value)
{
if( i < 0)
{
System.out.println("Error. out of bounds.");
}
if ( i > size())
{
Node currNode = head;
for(int j = 0; j < i; j++)
{
currNode = currNode.next;
}
currNode.next = new Node(value,null);
}
if ( i <= size())
{
Node currNode = head;
for(int j = 0; j < i-1; j++) // this moves CurrNode to the i-1th node
{
currNode = currNode.next;
}
currNode.next = new Node(value,currNode.next);
}
nItem++;
}
当我运行我的测试代码时,
public static void main (String[] args)
{
NumLinkedList test;
test = new NumLinkedList();
//System.out.println("this is how many initial items the initialized list has");
//System.out.println(test.size());
test.insert(1, 0.1);
System.out.println("have tried to insert value 0.1 @ position 1, that is the first element in list.");
test.print();
System.out.println("tried print(). did it work?");
test.insert(4, -1);
我在
中收到错误消息test.insert(1, 0.1);
,指的是
if ( i > size())
和
while(currNode.next != null)
因为我也没有初始化我的数组ADT,我相信我的列表ADT也被错误初始化了。很难在Google上找到适当的例子,任何有关ADT初始化的参考资料?
答案 0 :(得分:1)
您的问题不在初始化中,这很好,但在方法本身。
问题在于您正在将head
初始化为null
,但在print
和size
中,您正在进行currNode = head
},它也使它成为null
,然后在currNode.next
上循环。那会在那里抛出一个NullPointerException
。您需要转到所有方法并为极限情况添加特殊代码:
print
:
if ( head == null )
return;
size
:
if ( head == null )
return 0;
或者,您只需使用简单的size
语句替换整个return nItem;
方法。
insert
:
if ( head == null )
{
head = new Node(value,null);
return;
}
另外,在您的insert
中,您还需要return
内的if
,并且需要将if
替换为else
}}