0
我創建一個蠻力程序只是通過可能的串運行,(對於教育的目的只有課程),我有一個問題... 當我這樣做:暴力破解 - 的StackOverflowError
package com.arinerron.tools.Tools;
/**
*
* @author aaron
*/
public class BruteForce {
public static char[] CHARSET_ALPHABET = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n'};
private char[] CHARSET = {'a', 'b', 'c', 'd'};
private int LENGTH = 3;
private int sofar = 1;
public BruteForce(char[] charset, int length) {
this.CHARSET = charset;
this.LENGTH = length;
}
public String bruteForce() {
go("");
return "";
}
private void log(String t) {
System.out.println(t);
}
private void go(String w) {
for(int i = 0; i != this.CHARSET.length; i++) {
String txt = w + this.CHARSET[i];
if(sofar < LENGTH) {
go(txt);
} else {
}
System.out.println(txt);
}
sofar++;
}
public static void main(String[] args) {
BruteForce bf = new BruteForce(BruteForce.CHARSET_ALPHABET, 2);
bf.bruteForce();
}
}
我得到:
Exception in thread "main" java.lang.StackOverflowError
at java.lang.StringBuilder.append(StringBuilder.java:136)
at com.arinerron.tools.Tools.BruteForce.go(BruteForce.java:32)
at com.arinerron.tools.Tools.BruteForce.go(BruteForce.java:34)
at com.arinerron.tools.Tools.BruteForce.go(BruteForce.java:34)
at com.arinerron.tools.Tools.BruteForce.go(BruteForce.java:34)
at com.arinerron.tools.Tools.BruteForce.go(BruteForce.java:34)
at com.arinerron.tools.Tools.BruteForce.go(BruteForce.java:34)
at com.arinerron.tools.Tools.BruteForce.go(BruteForce.java:34)
at com.arinerron.tools.Tools.BruteForce.go(BruteForce.java:34)
at com.arinerron.tools.Tools.BruteForce.go(BruteForce.java:34)
at com.arinerron.tools.Tools.BruteForce.go(BruteForce.java:34)
at com.arinerron.tools.Tools.BruteForce.go(BruteForce.java:34)
at com.arinerron.tools.Tools.BruteForce.go(BruteForce.java:34)
at com.arinerron.tools.Tools.BruteForce.go(BruteForce.java:34)
at com.arinerron.tools.Tools.BruteForce.go(BruteForce.java:34)
爲什麼?它看起來並不難,電腦處理...:\
是的,它會在稍後我要實現它。現在,只是一個空的字符串! :) –
等等,讓程序運行,我應該移動sofar ++;去後(txt); –
@FnafServer不,你必須先遞增,否則你永遠不會退出遞歸 – jpw