1. ホーム
  2. java

[解決済み] 値を返す関数から何も返さないようにするにはどうしたらよいですか?

2022-02-14 12:28:38

質問

二分探索木があり、ノードを削除したいのですが、どうすればよいですか?

その親を取得する必要があるので、関数を書きました。

private BSTreeNode<T> getParent(BSTreeNode<T> root, BSTreeNode<T> node) {
        if(root == null) 
            return null;
        if(node.element().lessThan(root.element())) {
            if(root.getLeft() != null && root.getLeft().element().equal(node.element())) 
                return root;
            else
                getParent(root.getLeft(), node);
        } else {
            if(root.getRight() != null && root.getRight().element().equal(node.element()))
                return root;
            else
                getParent(root.getRight(), node);
        }
    }

C/C++と違い、Javaでは以下のようなエラーが発生します。

This method must return a result of type BSTreeNode<T>

関数の最後の行で値を返すように強制される。

自分の関数のコンテキストで修正するにはどうしたらいいですか?

どのように解決するのですか?

あなたの関数は、すべての可能な状況に対する戻り値を持っていません。あなたは持っています。

if (null)...

if (less than root)...
else ( if ...)
       else (no return!)

nullでなく、最後のelseに行った場合は何を返すのでしょうか?何も返しません。

あなたはどちらか return getParent... をelse文の中に入れてください。 return null 関数の最後(if文やelse文の中ではない)で

このようなコードは、if文が値を返さなかった場合のカバーとしてよく見かけます。

public int getAnswer()
{
    if (answer.equals("yes"))
        return 0;
    else if (answer.equals("no"))
        return 1;

    return null;
}