私はカスタムリンクリストのためのcontainsメソッドを書くように求められました。 私は、再帰的メソッドは、基底の場合、再帰的なケースを持つ必要があることを知っています。しかし、私は方法の再帰的なケースを記述する方法を理解するいくつかの問題を抱えています。これまでのところ私が書いたものですが、私のコードはベースケースを複数回実行しています。あなたは私にいくつかの指導をお願いできますか?宿題のためにJavaの再帰的メソッドを使用
public class OrderedList {
private Node first;
//Constructor
public OrderedList() {
this.first = null;
}
//Return the number of items in the list
public int size() {
int counter = 0;
Node pointer = this.first;
while (pointer != null) {
counter++;
pointer = pointer.next;
}
return counter;
}
//Return an array of copies of the stored elements
public Comparable[] getStore() {
Comparable[] elements = new Comparable[size()];
Node pointer = this.first;
if (this.first == null) {
return elements;
} else {
int i = 0;
while (pointer != null) {
elements[i] = pointer.data;
pointer = pointer.next;
i++;
}
return elements;
}
}
//true iff item matches a stored element
//Recursive
public boolean contains(Comparable item) {
//Base case
if (this.first == null) {
return false;
}
Node pointer = this.first;
this.first = this.first.next;
if (pointer.data.compareTo(item) == 0) {
return true;
}
//Recursive case
else {
boolean info = contains(item);
pointer.next = this.first;
this.first = pointer;
return info;
}
}
なぜあなたはそのメソッドのクラス変数を変更していますか? 'this.first'ではなく' Node'で渡されたものを使うべきです。そのメソッドの呼び出しごとにリストの先頭を変更しています。あなたはあなたのリストを破壊しています! – thatidiotguy