簡體   English   中英

為什么return語句沒有執行?

[英]why the return statement is not executing?

我正在嘗試在二叉樹中實現find方法。 當該方法需要返回一個值,但即使在同一分號中要執行的其他行中,它似乎也未執行該語句,就會出現問題。

public String find(Node currentNode, String value)
{
    if(isEmpty())
    {
        return null;
    }
    else
    {
        if(currentNode.getData().compareToIgnoreCase(value) == 0)
        {
            System.out.println("current -> "+currentNode.getData()); //showing
            return currentNode.getData(); //not executing
        }

        if(value.compareToIgnoreCase(currentNode.getData()) < 0)
        {
            find(currentNode.getLeft(), value);
        }
        else if(value.compareToIgnoreCase(currentNode.getData()) > 0)
        {
            find(currentNode.getRight(), value);
        }
    }

    return null; //always executing
}

我期望“ a”,但返回null。

當您執行該行時

find(currentNode.getLeft(), value);

您的語句return currentNode.getData(); 正在執行,但是您忽略了遞歸調用返回的內容。 (類似於getRight()語句。)然后,if / else語句完成,並執行底部的return null 這就是為什么您總是得到null

返回遞歸調用返回的任何內容,以便返回的值正確傳播回原始調用,例如:

return find(currentNode.getLeft(), value);

您必須使用返回遞歸調用的數據,現在您正在忽略它。 同樣,無論如何,您總是返回null ,這是程序的固定版本:

public String find(TreeNode currentNode, String value) {
    if (currentNode == null) {
        return null;
    }

    if(currentNode.getData().compareToIgnoreCase(value) == 0) {
        return currentNode.getData(); //not executing
    }

    if (currentNode.getData().compareToIgnoreCase(value) > 0) {
        return find(currentNode.getLeft(), value);
    } else {
        return find(currentNode.getRight(), value);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM