2016-09-08 2 views
-1

を探すI以下のクラスがあります。私は、最大深さを見つける必要があるオブジェクトにはオブジェクトのリストが含まれています。最大深さ

class A { 
    List<A> as; 
} 

を。例えば、私はこれを持つことができます

A firstA = new A(); 
A secondA = new A(); 
A thirdA = new A(); 
firstA.addA(secondA); 
firstA.addA(thirdA); 
secondA.addA(new A()); 
secondA.addA(new A()); 

を私は3

私は再帰的なメソッドを実行しようとしました

を返す必要があり、

+6

は、あなたがしようとしているかを示すことはできますか? – Beethoven

+0

'secondA.add(firstA);'を考慮する必要がありますか? – bradimus

+0

静的変数max_Size = 3をクラスAのaddAメソッドに設定します。サイズがmax_sizeより大きいかどうかを確認します。それがeirtherを置き換えたり削除したりする場合は、 –

答えて

2

Javaの使用します8ストリーム:

class A { 
    List<A> as; 

    public int getDepth() { 
     return 1 + as.stream().mapToInt(A::getDepth).max().orElse(0); 
    } 
} 

ストリームに精通していない場合は、「すべての子の最大深度に1を加算するか、または子がない場合は0を加算する」と解釈できます。

あなたがAを変更できない場合、あなたはまだメソッドに渡すことで、これを使用することができます:

public class MyClass { 
    public static int getDepth(A a) { 
     return 1 + a.as.stream().mapToInt(MyClass::getDepth).max().orElse(0); 
    } 
} 
+0

メソッドを 'A'クラスに追加することはできませんが、これを使う方法があります。今私はそのアイディアを手に入れようとします。ありがとう、あなた。 –

+0

Aの方法でない場合は、それを行う方法の説明を追加します。 – sprinter

+0

ありがとうございます! –

-1

再帰の深さ、コンピューティング:

public static int computeDepth(A a) 
{ 
    int maxDepth = 0; 
    for(A innerA : a.getAs()) 
    { 
     int depth = computeDepth(innerA); 
     if(depth > maxDepth) 
      maxDepth = depth; 
    } 
    return maxDepth + 1; 
} 
関連する問題