這給我一些麻煩......我不太明白髮生了什麼事。這是一個數據結構分配,我根據教師UML圖創建了每個類。這看起來像是一個奇怪的鏈表實現。我不太瞭解ListNode類中的構造函數調用另一個構造函數,我不明白爲什麼沒有指定計數器來跟蹤列表中的項目。我也不明白我寫的異常類,因爲教師指定「第二個構造函數調用超類的構造函數,併發送以下字符串作爲其參數:(name +」爲空「);」我只是空着。我不太明白這是如何工作的。我也完全不知道泛型如何工作。我做了一些閱讀,但沒有明確說明。我會發布我的代碼和任何幫助,將不勝感激。我花了一天的工作去做這件事,我覺得自己是個絕對白癡,因爲這看起來並不難。鏈接列表與泛型類型的問題
的ListNode類:
package linkedLists;
public class ListNode<T> {
T data;
ListNode<T> nextNode;
ListNode(T object)
{
this(object, null);
}
ListNode(T object, ListNode<T> node)
{
data = object;
nextNode = node;
}
T getData()
{
return data;
}
ListNode<T> getNext()
{
return nextNode;
}
}
這裏是List類。
package linkedLists;
public class List<T>{
ListNode<T> firstNode;
ListNode<T> lastNode;
String name;
public List()
{
this("list");
}
public List(String listName)
{
name = listName;
firstNode = null;
lastNode = null;
}
public void insertAtFront(T insertItem)
{
if(isEmpty())
{
ListNode<T> node = new ListNode<T>(insertItem);
firstNode = node;
lastNode = node;
}
else
{
ListNode<T> tempNode = firstNode;
ListNode node = new ListNode(insertItem, tempNode);
firstNode = node;
}
}
public void insertAtBack(T insertItem)
{
if(isEmpty())
{
ListNode<T> node = new ListNode<T>(insertItem);
firstNode = node;
lastNode = node;
}
else
{
ListNode<T> tempNode = lastNode;
ListNode node = new ListNode(insertItem, tempNode);
lastNode = node;
}
}
public T removeFromFront() throws EmptyListException
{
if(isEmpty())
{
throw new EmptyListException("gfy");
}
else
{
ListNode<T> nr;
nr = firstNode;
if(firstNode == lastNode)
{
firstNode = null;
lastNode = null;
}
else
{
firstNode = firstNode.getNext();
}
return nr.getData();
}
}
public T removeFromBack() throws EmptyListException
{
if(isEmpty())
{
throw new EmptyListException("gfy");
}
else
{
ListNode<T> nr;
nr = lastNode;
if(firstNode == lastNode)
{
firstNode = null;
lastNode = null;
}
else
{
ListNode<T> current = firstNode;
ListNode<T> secondToLast = null;
int numOfNodes = 0;
while(current != lastNode)
{
secondToLast = current;
current = current.getNext();
}
lastNode = secondToLast;
lastNode.nextNode = null;
}
return nr.getData();
}
}
public boolean isEmpty()
{
if(firstNode == null)
return true;
else
return false;
}
public void print()
{
if(isEmpty())
{
System.out.println("List is empty!");
return;
}
else
{
System.out.println(firstNode.getData());
ListNode<T> printNode = firstNode;
while(printNode != lastNode)
{
printNode = printNode.getNext();
System.out.println(printNode.getData());
}
}
}
}
Exception類
package linkedLists;
public class EmptyListException extends RuntimeException
{
public EmptyListException()
{
this("list");
}
public EmptyListException(String name)
{
}
}
最後的主要方法和測試類:
// ListTest.java
// ListTest class to demonstrate List capabilities.
import quiz1cs304summer2013kensotak.List;
import quiz1cs304summer2013kensotak.EmptyListException;
public class ListTest
{
public static void main(String[] args)
{
List<Integer> list = new List<Integer>(); // create a List
// insert integers in list
list.insertAtFront(-1);
list.print();
list.insertAtFront(0);
list.print();
list.insertAtBack(1);
list.print();
list.insertAtBack(5);
list.print();
// remove objects from list; print after each removal
try
{
int removedItem = list.removeFromFront();
System.out.printf("\n%d removed\n", removedItem);
list.print();
removedItem = list.removeFromFront();
System.out.printf("\n%d removed\n", removedItem);
list.print();
removedItem = list.removeFromBack();
System.out.printf("\n%d removed\n", removedItem);
list.print();
removedItem = list.removeFromBack();
System.out.printf("\n%d removed\n", removedItem);
list.print();
} // end try
catch (EmptyListException emptyListException)
{
emptyListException.printStackTrace();
} // end catch
} // end main
} // end class ListTest
下面列出的是輸出:
The list is: -1
The list is: 0 -1
The list is: 0 -1 1
The list is: 0 -1 1 5
0 removed
The list is: -1 1 5
-1 removed
The list is: 1 5
5 removed
The list is: 1
1 removed
Empty list
我的輸出是:
-1
0
-1
0
-1
Exception in thread "main" java.lang.NullPointerException
at linkedLists.List.print(List.java:146)
at ListTest.main(ListTest.java:18)
調用另一個的構造函數稱爲_constructor chaining_,並已在[此問題](http://stackoverflow.com/q/285177/1281433)中進行了討論。 –
你有很多問題和很多代碼。我的建議是在做一些研究之後問幾個問題(你說你不懂泛型,這是一個很好的開始) – Daniel