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呢?
各位前辈,快指点迷津啊!
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呢?
各位前辈,快指点迷津啊!
3 < dwdh.length不满足嘛
总共递归三次
最后那个start at 2是前第一次递归的
for(;2 < dwdh.length;i++)
你的上一句是从1开始到2结束是不会得到3的!
若改为i<=dwdh.length,就行了吧!
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 );
}
}
}
}
}
}
崩溃
又排了一下
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 );
}
}
}
}
}
}