2017-06-02 14 views
0

if-else句の数を計算する必要があります。私はそれを行うには、javaパーサーを使用しています。 どのように私は他の句を数えるん:私はすべてのif-else句の合計数を計算します(ネストされたものを含む)

node.getChildNodesByType(IfStmt.class)) 

問題の関数を使用して、句の場合とそうでない-IFの数を取得しました :

私は今まで何をやったか

? この関数は "else"節を無視します。

例:この場合

if(condition) 
{ 
    if(condition 2) 
     // 
    else 
} 

else if(condition 3) 
{ 
    if (condition 4) 
     // 
    else 
} 
else 
{ 
    if(condition 5) 
     // 
} 

、私は答えは8になりたいと思いますが、それが発生したため、コールの大きさは5を返しますのみ5「の場合」とは、他の条項を無視。 else節を数えるのに直接役立つ関数はありますか?

マイコード:

public void visit(IfStmt n, Void arg) 
      { 
      System.out.println("Found an if statement @ " + n.getBegin()); 
      } 

      void process(Node node) 
      { 
       count=0; 
       for (Node child : node.getChildNodesByType(IfStmt.class)) 
       { 
        count++; 
        visit((IfStmt)child,null); 
       } 
      } 
+0

このことができます参照してください:https://stackoverflow.com/questions/17552443/google-javaparser-ifstmt-not-counting-consequent-else-if – Berger

+0

@Berger Iそれを通過しました。発生する問題は、ネストされたif-elseを考慮しないことです。 その質問のOPの例は私のものと異なり、その答えはこれではうまくいかない:/ – xmacz

答えて

0

は、この答えは、は、以下のgithubのthreadを解決されています。 Javaパーサーの組み込みメソッドは、十分以上に役立ちます。

回答:

static int process(Node node) { 
    int complexity = 0; 
    for (IfStmt ifStmt : node.getChildNodesByType(IfStmt.class)) { 
     // We found an "if" - cool, add one. 
     complexity++; 
     printLine(ifStmt); 
     if (ifStmt.getElseStmt().isPresent()) { 
      // This "if" has an "else" 
      Statement elseStmt = ifStmt.getElseStmt().get(); 
      if (elseStmt instanceof IfStmt) { 
       // it's an "else-if". We already count that by counting the "if" above. 
      } else { 
       // it's an "else-something". Add it. 
       complexity++; 
       printLine(elseStmt); 
      } 
     } 
    } 
    return complexity; 
} 
関連する問題