import java.io.*;
import java.util.regex.*;public class Test{
private static String[] dwdh = {"AEG9","AEG91","AEG91A"};

public static void findChild( String element ,int idx ) {
System.out.println("find " + element + "'s child:");
System.out.println("idx: " + idx );
Pattern pattern = Pattern.compile( element + "." );
for ( int i=(idx+1); i<dwdh.length; i++ ) {
System.out.println("start at " + i );
Matcher matcher = pattern.matcher( dwdh[i] );
if ( matcher.find() ) {
System.out.println( dwdh[i] );
findChild ( dwdh[i], i );
}
}
}

public static void main( String[] args) {
findChild( dwdh[0], 0 );
}
}
/*-----------------------------------------------------------------------------
结果如下:
find AEG9's child:
idx: 0
start at 1
AEG91
find AEG91's child:
idx: 1
start at 2
AEG91A
find AEG91A's child:
idx: 2
start at 2
AEG91A
find AEG91A's child:
idx: 2
/*-----------------------------------------------------------------------------------
请注意最后一次,idx为2,start at 照理说该为3啊,为什么还是为2呢?
各位前辈,快指点迷津啊!

解决方案 »

  1.   

    当然不是3啊
    3 < dwdh.length不满足嘛
    总共递归三次
    最后那个start at 2是前第一次递归的
    for(;2 < dwdh.length;i++)
      

  2.   

    for ( int i=(idx+1); i<dwdh.length; i++ ) {
    你的上一句是从1开始到2结束是不会得到3的!
    若改为i<=dwdh.length,就行了吧!
      

  3.   

    1   public static void findChild( String element ,int idx ) {
    2 System.out.println("find " + element + "'s child:");   //find AEG9's child:
    3 System.out.println("idx: " + idx );                    //idx: 0
    4 Pattern pattern = Pattern.compile( element + "." );
    5 for ( int i=(idx+1); i<dwdh.length; i++ ) {            //这时i=1
    6 System.out.println("start at " + i );                  //start at 1
    7 Matcher matcher = pattern.matcher( dwdh[i] ); 
    8 if ( matcher.find() ) {
    9 System.out.println( dwdh[i] );                      //AEG91
    10 findChild ( dwdh[i], i );                           //   这里i=1
    11  findChild( String element ,int idx ) {   
    12 System.out.println("find " + element + "'s child:");       //find AEG91's child:
    13 System.out.println("idx: " + idx );                        //idx: 1
    14 Pattern pattern = Pattern.compile( element + "." );
    15 for ( int i=(idx+1); i<dwdh.length; i++ ) {           //这时i=2        
    16 System.out.println("start at " + i );                      //start at 2
    17 Matcher matcher = pattern.matcher( dwdh[i] );
    18 if ( matcher.find() ) {
    19 System.out.println( dwdh[i] );                       //AEG91A
    20 findChild ( dwdh[i], i );                           //这里i=2
    21  findChild( String element ,int idx ) {   
    22 System.out.println("find " + element + "'s child:");       //find AEG91A's child:
    23 System.out.println("idx: " + idx );                        //idx: 2
    24 Pattern pattern = Pattern.compile( element + "." );
    25 for ( int i=(idx+1); i<dwdh.length; i++ ) {           
    //这时i=3 不满足条件了 跳到第15行的循环
    //上次循环时i=2,这次循环加1,所以也要退出循环
    //然后退到第5行的循环,这时i=2
    //start at 2
    //AEG91A
    //到这里是不是已经明白了
    26 System.out.println("start at " + i );                      
    27 Matcher matcher = pattern.matcher( dwdh[i] );
    28 if ( matcher.find() ) {
    29 System.out.println( dwdh[i] );                       
    30 findChild ( dwdh[i], i );
    }
    }
    }

    }
    }
    }
      

  4.   

    格式怎么乱了?
    崩溃
    又排了一下
    1 public static void findChild( String element ,int idx ) {
    2 System.out.println("find " + element + "'s child:");  
     //find AEG9's child:
    3 System.out.println("idx: " + idx );                    
    //idx: 0
    4 Pattern pattern = Pattern.compile( element + "." );
    5 for ( int i=(idx+1); i<dwdh.length; i++ ) {            
    //这时i=1
    6 System.out.println("start at " + i );           
    //start at 1
    7 Matcher matcher = pattern.matcher( dwdh[i] ); 
    8 if ( matcher.find() ) {
    9 System.out.println( dwdh[i] );        
      //AEG91
    10 findChild ( dwdh[i], i );            
    //   这里i=1
    11 findChild( String element ,int idx ) {   
    12 System.out.println("find " + element + "'s child:");   
    //find AEG91's child:
    13 System.out.println("idx: " + idx );                    
    //idx: 1
    14 Pattern pattern = Pattern.compile( element + "." );
    15 for ( int i=(idx+1); i<dwdh.length; i++ ) {        
    //这时i=2        
    16 System.out.println("start at " + i );                 
      //start at 2
    17 Matcher matcher = pattern.matcher( dwdh[i] );
    18 if ( matcher.find() ) {
    19 System.out.println( dwdh[i] );               
    //AEG91A
    20 findChild ( dwdh[i], i );                    
    //这里i=2
    21 findChild( String element ,int idx ) {   
    22 System.out.println("find " + element + "'s child:");    //find AEG91A's child:
    23 System.out.println("idx: " + idx );                     //idx: 2
    24 Pattern pattern = Pattern.compile( element + "." );
    25 for ( int i=(idx+1); i<dwdh.length; i++ ) {           
    //这时i=3 不满足条件了 跳到第15行的循环
    //上次循环时i=2,这次循环加1,所以也要退出循环
    //然后退到第5行的循环,这时i=2
    //start at 2
    //AEG91A
    //到这里是不是已经明白了
    26 System.out.println("start at " + i );                      
    27 Matcher matcher = pattern.matcher( dwdh[i] );
    28 if ( matcher.find() ) {
    29 ystem.out.println( dwdh[i] );                       
    30 findChild ( dwdh[i], i );
    }
    }
    }

    }
    }
    }