2017-05-16 13 views
0

私の先生が私にいくつかのJavaコードを与えて、私にPythonで書き直すよう依頼しました。私はそれを書き換えると助けを求めていないんだけど、私は私のJavaコンパイラにコードを入力するとき、私はこのエラーを得た:Permutations Code not working Java

Exception in thread "main" java.lang.StackOverflowError 
    at 
java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:449) 
at java.lang.StringBuilder.append(StringBuilder.java:136) 
at java.lang.StringBuilder.<init>(StringBuilder.java:113) 
at Permutations.perm1(Permutations.java:12) 
at Permutations.perm1(Permutations.java:4) 

すべてのヘルプは非常にここで、高く評価されたコードは次のとおりです。

public class Permutations { 
public static void perm1(String s) { 
    perm1("", s); 
} 
private static void perm1(String prefix, String s){ 
    int N=s.length(); 
    if(N==0){ 
     System.out.println(prefix); 
    }else{ 
     for(int i=0; i<N; i++){ 
      perm1(prefix+s.charAt(i)+s.substring(0, i)+s.substring(i+1, 
N)); 
     } 
    } 
} 
public static void perm2(String s){ 
    int N=s.length(); 
    char[] a = new char[N]; 
    for(int i=0;i<N;i++){ 
     a[i]=s.charAt(i); 
     perm2(a,N); 
    } 
} 
private static void perm2(char[] a, int n){ 
    if(n==1){ 
     System.out.println(a); 
     return; 
    } 
    for(int i=0; i<n;i++){ 
     swap(a,i,n-1); 
     perm2(a,n-1); 
     swap(a,i,n-1); 
    } 
} 
private static void swap(char[] a, int i, int j) { 
    char c; 
    c=a[i]; 
    a[i]=a[j]; 
    a[j]=c; 
} 
    public static void main(String[] args) { 
int N=5; 
String alphabet="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; 
String elements = alphabet.substring(0,N); 
perm1(elements); 
System.out.println(); 
perm2(elements); 
    } 

} 

答えて

0
デバッガでコードをステップ実行

は、あなたがあるため、このセクションのスタックオーバーフローエラーを取得していることを示しています

for(int i=0; i<N; i++){ 
     perm1(prefix+s.charAt(i)+s.substring(0, i)+s.substring(i+1,N)); 
} 

perm1が繰り返し呼び出されますが、入力は、CHではありませんange - 接頭辞がないと常に"abcde"が渡され、prefix+s.charAt(i)+s.substring(0, i)+s.substring(i+1,N)の結果はまだ"abcde"です。呼び出しは再帰的で、反復ごとに入力が変化しないので、オーバーフローして例外がスローされるまでスタック上のスペースが徐々に繰り返されます。