2011-10-21 13 views
0

私はjavaコードでjavaファイルを読んで、そこにifステートメントの最大ネスト数を決定する必要があります。例えば入れ子になっている状態を見つける方法

if (someCondition) 
{ 
    if (someCondition) 
    { 
     // Expression 
    } 
} 

この場合、プログラムは、問題がif後の中括弧の位置が不確実であるということである今greatest nested if depth is 2.

が表示されます。

例えば、それはのようにすることができます:

Curly brace start and end comes in same line 
if (someCondition){} 

OR 
Curly brace start in next line 
if (someCondition) 
{ 
} 

OR 
Conditions without curly brace 
if (someCondition) 
    if (someCondition) // Single line without curly brace 

誰もが必要なネストされたカウントを取得するための最良の方法がどうなるかを示唆することはできますか?

+0

このコードベースの複雑さを分析するためにこれを行う場合は、循環的複雑さのようなものを測定する他のツールがあるかどうかを見て、どの領域のコードが注意を必要としているかを知る。 –

答えて

1

Javaソースコードの抽象構文木(AST)を解析する必要があります。 Java library for code analysisを参照してください。 ASTを取得したら、ネストされた条件文の最長パスを検索することができます。

1

答えがすでに述べられているので、コードを手動で表示するのではなく、ASTに頼るべきです。 ASTは間違っていることは決してありません。

今は完全な解決策がわかりませんが、コンピューティングソフトウェアメトリクスの既存のツールを見てみることをお勧めします。入れ子の深さは典型的なメトリックであり、ツールが必要です。

何も見つからない場合は、少なくともEclipseプラグインのようなものに書き換えることができます。その場合、EclipseエディタでJavaファイルをロードするだけで、Eclipseがすべての作業を自動化し、ASTを無料で提供します。所与のASTの入れ子の深さを決定することは、単純な作業となる。プロトタイプの開発には数時間を要しません。プロジェクト全体をカバーするように拡張するのは簡単で、「プロジェクトのどのJavaファイルに最大の入れ子の深さがあり、深さはどれくらいか」といった質問に答えることができます。しかし、もう一度、他の誰かが、すでにこれを行う既存のツールを指摘します。

0

I82多くの回答は確かにあなたをそこに連れて来るだろうが、ちっくらのように感じる。

あなたのプロジェクトについて少し知っていれば、最大値のレコードを持つ単純なスタックメカニズムが{とポップオン}でトリックプッシュを行うと思います。その基本モデルが機能したら、制御文の特殊なケースを1行の本体で追加します(これはif、for、for ...の間有効です)。そのような場合は、それらのキーワードの後に​​(および)を探します。その組み合わせに遭遇したら、スキャンで別の制御文またはセミコロンが検出された場合は、その特殊ケースの1つであり、プッシュする必要があります。 })。

関連する問題