이것은 약간의 문제를 일으 킵니다. 무슨 일이 일어나는지 잘 모르겠습니다. 이것은 데이터 구조 할당이고 강사 UML 다이어그램에 지정된대로 모든 클래스를 만들었습니다. 이것은 연결된 목록의 이상한 구현처럼 보입니다. 필자는 다른 생성자를 호출하는 ListNode 클래스의 생성자를 이해하지 못하고 왜 카운터가 목록의 항목을 추적하도록 지정되지 않았는지 이해하지 못합니다. 강사가 "두 번째 생성자가 수퍼 클래스 생성자를 호출하고 다음 문자열을 인수로 보냅니다."(name + "empty"); "라는 예외 클래스를 이해할 수 없습니다. 방금 그걸 남겼어요. 나는 이것이 어떻게 작동하는지 잘 모른다. 나는 또한 generics가 어떻게 작동하는지 전혀 모른다. 나는 약간의 독서를했다. 그러나 그것은 didnt한다 t는 많이 깨끗하게한다. 내 코드를 게시하고 도움을 주시면 감사하겠습니다. 나는 일을 쉬면서이 일을했다. 특히 어려운 것처럼 보이지 않기 때문에 나는 절대 바보처럼 느낀다.일반적인 유형의 문제로 연결된 목록
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());
}
}
}
}
예외 클래스
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). –
많은 질문과 많은 코드가 있습니다. 제 제안은 몇 가지 연구를 한 후에 정리 된 몇 가지 질문을하는 것입니다 (당신은 Generics를 이해하지 못한다고 했으니 까 시작하는 것이 좋습니다.) – Daniel