第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

(Java)使用從二叉樹輸出布爾值的功能(類謂詞)接口

(Java)使用從二叉樹輸出布爾值的功能(類謂詞)接口

哈士奇WWW 2022-05-12 16:09:53
我有點麻煩:我構(gòu)建了一個二叉樹類,其中包含一些對于此任務(wù)而言并不有趣的函數(shù)。每個節(jié)點都存儲一個左右子節(jié)點和一個父節(jié)點。每個節(jié)點都有一個鍵值,可以看作是一個標(biāo)簽。我創(chuàng)建了 3 個類:Tree.java 是一個節(jié)點的類。BinaryTree.java 包含一些與整個樹相關(guān)的方法,例如最小值/最大值。Main.java 測試 Tree 的特性并包含 main 方法。我的問題: 我想用一個方法編寫一個功能接口,該方法將節(jié)點作為參數(shù)并輸出一個布爾值。這可用于傳入根節(jié)點并遞歸檢查樹中的每個節(jié)點是否大于或小于一個值。但是,我對功能接口完全陌生,我無法真正掌握功能背后的邏輯。這是我到目前為止得到的:@FunctionalInterfacepublic interface NodeOperation {    public abstract boolean forAll(Tree node);}NodeOperation overTwenty = (node) -> node.getValue() < 20;當(dāng)我嘗試使用 lambda 表示法時,當(dāng)我想打印 overTwenty 時它不會返回布爾值。有人可以幫我實現(xiàn)功能接口并解釋我如何訪問布爾變量,以便我可以開始考慮如何為每個節(jié)點遞歸地執(zhí)行此操作。如果您對二叉樹不太了解,建議您在 Wikipedia 上查找。就我而言,我制作了一個 BST(二叉搜索樹),這意味著它的結(jié)構(gòu)基于右側(cè)的較大值和左側(cè)的較小值。如果您需要我的代碼的某些特定部分,只需提出建議,我將在此處發(fā)布:)
查看完整描述

2 回答

?
HUWWW

TA貢獻(xiàn)1874條經(jīng)驗 獲得超12個贊

在java中,接口的方法總是公開的。所以你的界面可以變成


@FuctionalInterface

    public interface NodeOperation {

        boolean forAll(Tree node);

    }

所以你寫了這行代碼


NodeOperation overTwenty = (node) -> node.getValue() < 20;

Wich 會為您創(chuàng)建一個接口實例,用于檢查節(jié)點的值是否低于 20


因此,假設(shè)您有一個值為 30 的 Tree 節(jié)點實例,如果您調(diào)用


 overTwenty.forAll(node) //will return false

這個函數(shù)不是遞歸的。如果要將函數(shù)應(yīng)用于節(jié)點的所有子節(jié)點,則必須在 Tree 類上編寫遞歸方法


   public class Tree{

       ... 

    public boolean recursiveNodeOperation(NodeOperation operation) {

       if(!operation.forAll(this)) return false;

       for(Tree child : children) 

            if(! child.recursiveNodeOperation(operation)) 

                return false

       return true ;


      } 

    } 




root.recursiveNodeOperation(overTwenty); //will return true if all the nodes of the Tree starting from root are lower than 20

此方法將遞歸應(yīng)用 Node 操作,因此將檢查 Tree 中的所有元素是否與您的函數(shù)匹配


查看完整回答
反對 回復(fù) 2022-05-12
?
MMTTMM

TA貢獻(xiàn)1869條經(jīng)驗 獲得超4個贊

您創(chuàng)建的overTwenty對象是一個函數(shù)。如果要在樹的節(jié)點中使用它,則必須在樹的節(jié)點上調(diào)用它的唯一方法。例如,您可以這樣稱呼它:

boolean result = overTwenty.forAll(root);

順便說一句,您的NodeOperationinterface 與 a 非常等價,Function<Tree, Boolean>只是它返回的是原語boolean而不是 class Boolean。


查看完整回答
反對 回復(fù) 2022-05-12
  • 2 回答
  • 0 關(guān)注
  • 154 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號