これは宿題用です。宿題は再帰ではなく、ツリー構造です。割り当てはほぼ完了しましたが、ツリーを上に移動するための再帰的な方法が壊れています。ツリー構造は、以下のクラスによって与えられます。
package lab12;
import java.io.Serializable;
public class Dog implements Serializable{
public Dog[] children;
public String name;
public Dog(String name)
{
this.name = name;
}
@Override
public String toString()
{
return name;
}
}
その理由は return null であると確信しています。私のforループと組み合わせたステートメント。for ループは、子を含まないノードを反復処理し、結果として null を返します。これでメソッドが終了し、プログラムに null が返され、null ポインター例外が発生します。
return null ステートメントを削除できないか、for ループを使用して 100% 戻りますが、コンパイルされません。
public Dog findParent(Dog root, String name)
{
String top = "Spot";
if(top.equals(name))
{
System.out.println("No further records");
System.out.println("Goodbye.");
System.exit(0);
}
for(int i = 0; root.children != null && i < root.children.length; i++)
{
if(root.children[i].name.equals(name))
{
return root;
}
else
{
return findParent(root.children[i], name);
}
}
return null; //Compiler still requires a return here.
}
これは、非 void 再帰メソッドで for ループを使用する場合の一般的な問題に違いないと思います。コンパイラを満足させながら、余分な return null ステートメントを持たないようにする方法はありますか?