2017-07-22 12 views
0

私は学習の練習としてmatlabにツリークラスを構築しています。Matlabのユーザー定義クラスのクラスの型をテストします

コードを以下に示します。

LeftNodeとRightNodeのクラスタイプをテストしている部分が問題を抱えています。

以下のバージョンは、最初の呼び出しでは機能しますが、クラスの種類をテストするための特にクリーンな方法ではなく、ベースケース(RightNodeまたはLeftNodeを持たない) 。

どちらの場合でも、ユーザー定義クラスのクラスタイプをテストする正しい方法は何ですか?コンペア機能

isa(this.LeftNode,'TreeNode') 

あなたは正しい文字列を使用している場合あなたの方法でも動作します。ちょうどクラスをテストするための最良の方法は、「ISA」関数である

LeftNode = TreeNode(2,[],[]); 
RightNode = TreeNode(2,[],[]); 
TN = TreeNode(1,LeftNode, RightNode); 
TN.getSum() 



classdef TreeNode < handle 

properties 
    LeftNode 
    RightNode 
    Data 
end 

methods 

    function TN = TreeNode(Data, Left, Right) 

     TN.Data = Data; 
     TN.LeftNode = Left; 
     TN.RightNode = Right; 

    end 

    function sum = getSum(this) 

     sum = this.Data; 

     if (class(this.LeftNode) == 'TreeNode') == 1 || isempty(this.LeftNode)     
      sum = sum + getSum(this.LeftNode); 
     end 

     if (class(this.RightNode) == 'TreeNode') == 1 || isempty(this.RightNode)     
      sum = sum + getSum(this.RightNode); 
     end 

    end 

end 

end 
+1

A)あなたは、テスト== trueの場合は行う必要はありません。それはちょうど余分です。テストすればやります。 b)控除が返ってくるとあなたは何を期待していますか?あなたのオブジェクトに 'isempty'メソッドを定義しましたか? –

答えて

1

を使用するコードを実行するために

:いけない使用 '==' が、 'ISA' 関数と行く、とにかく 'strcmpの'

strcmp(class(this.LeftNode),'TreeNode') 

を使用しています。

他のいくつかのバグを修正する:

if isa(this.LeftNode,'TreeNode') && ~isempty(this.LeftNode)     
    sum = sum + this.LeftNode.getSum(); 
end 
関連する問題