こんにちは皆私はJavaを使い慣れていないので、IDは本当にこの点について助けてくれています。 これは私が遭遇した問題です: 私はリストクラスとlistNodeクラスを持っています、リストクラスは名前、firstNodeとlastNodeで表されます。 firstNodeとlastNodeはlistNode型であり、listNodeはObject(例:dataまたはObject o)で表され、listNode型のリストの次のNodeを指すnextNodeによって表されます。hasNext()メソッドを使用した再帰および逆帰ループ
Listクラス:
public class List {
private ListNode firstNode;
private ListNode lastNode;
private String name;
public List() {
this("list");
}
public List(String listName) {
name = listName;
firstNode = lastNode = null;
}
public void insertAtFront(Object insertItem) {
if (isEmpty())
firstNode = lastNode = new ListNode(insertItem);
else
firstNode = new ListNode(insertItem, firstNode);
}
public void insertAtBack(Object insertItem) {
if (isEmpty())
firstNode = lastNode = new ListNode(insertItem);
else
lastNode = lastNode.nextNode = new ListNode(insertItem);
}
public Object removeFromFront() throws EmptyListException {
if (isEmpty())
throw new EmptyListException(name);
Object removedItem = firstNode.data;
if (firstNode == lastNode)
firstNode = lastNode = null;
else
firstNode = firstNode.nextNode;
return removedItem;
}
public Object removeFromBack() throws EmptyListException {
if (isEmpty())
throw new EmptyListException(name);
Object removedItem = lastNode.data;
if (firstNode == lastNode)
firstNode = lastNode = null;
else {
ListNode current = firstNode;
while (current.nextNode != lastNode)
current = current.nextNode;
lastNode = current;
current.nextNode = null;
}
return removedItem;
}
public boolean isEmpty() {
return firstNode == null;
}
public void print() {
if (isEmpty()) {
System.out.printf("Empty %s\n", name);
return;
}
System.out.printf("The %s is : ", name);
ListNode current = firstNode;
while (current != null) {
System.out.printf("%s", current.data);
current = current.nextNode;
}
System.out.println("\n");
}
@Override
public String toString() {
String stk = "(";
if(isEmpty())return "Empty List";
ListNode checkNode = firstNode;
while (checkNode != null) {
stk += checkNode.data.toString()+ " , ";
checkNode = checkNode.nextNode;
}
return stk+")";
}
public ListNode removeAt (int k){
if(k<=0 || k>getLength())
try{
throw new IllegalValues();
}catch(IllegalValues iv){
iv.printStackTrace();
return null;
}
ListNode newNode = firstNode;
if (k==1) {
ListNode removedNode = firstNode;
firstNode = firstNode.nextNode;
return removedNode;
}
ListNode someNode = firstNode;
for (int i = 1; i < k - 1; i++) {
someNode = someNode.nextNode;
}
ListNode removedNode = someNode.nextNode;
someNode.nextNode = someNode.nextNode.nextNode;
return removedNode;
}
public int getLength(){
ListNode checkNode = firstNode;
int count =0;
while (checkNode != null) {
count++;
checkNode = checkNode.nextNode;
}
return count;
}
public void show(){
if (firstNode==null)
return;
else
System.out.print(firstNode + " ,");
firstNode.show();
}
public void showRev(){
if (lastNode==null)
return;
else
System.out.println(lastNode + ",");
lastNode.showRev();
}
}
ListNodeクラス
public class ListNode {
Object data;
ListNode nextNode;
public ListNode(Object o) {
this(o, null);
}
public ListNode(Object o, ListNode node) {
data = o;
nextNode = node;
}
public Object getObject() {
return data;
}
public ListNode getNext(){
return nextNode;
}
public ListNode show() {
if(this.nextNode == null)return this;
ListNode displayMe = nextNode.show();
System.out.print(displayMe + " , ");
return displayMe;
}
public ListNode showRev() {
if(this.firstNode == null)return this;
ListNode displayMe = lastNode.show();
System.out.print(displayMe + " , ");
return displayMe;
}
}
私は私がしようとしている今、最初から最後まで、リスト内のすべてのオブジェクトを表示するショーと呼ばれる再帰的なメソッドを持っています同様の方法(メソッド名はshowRev())を使ってオブジェクトを末尾から始め(再帰的なメソッド)まで表示します。これは以前のメソッドを持つことが可能だとは思わないので、このメソッドにちょっと残っています。 Idは本当に任意のアイデア おかげでみんな
ちょうどfyi: 'show'は[再帰的]ではありません(http://pages.cs.wisc.edu/~calvin/cs110/RECURSION.html) – nem035
クラスリストの番組は再帰的ではありませんが、それは再帰的なListNodeのshowメソッドを呼び出す –
いいえ、それは同じクラスから作成されたメソッドを別のインスタンスで呼び出すだけです。 'this.show'を呼び出した場合、' anotherNode.show'を呼び出すのは再帰的でした。 – nem035