我不知道如何让我的代码耗费更少的时间。我的任务是使暴力密码破解。我知道密码有多长,它包含哪些字符。到目前为止,我有这种方法。
public boolean moznosti(char [] arr, String pr, int a, int b) {
if (b == 0) {
char [] heslo = pr.toCharArray();
if(tryOpen(heslo)) {
return false;
}
return true;
}
for (int i = 0; i < a; i++) {
String tmp = pr+arr[i];
if (moznosti(arr, tmp, a, b-1) == false) {
return false;
}
moznosti(arr, tmp, a, b-1);
}
return true;
}
}
heslo是密码。任何想法?
答案 0 :(得分:0)
查看您的代码结构。
你有一个for循环,递归调用你的moznosti方法,每次调用它做同样的事情。
我不知道你的变量是什么意思,但假设a和b是4.你的第一个循环将使用相同的b参数调用你的moznosti方法4次。
这不是导致时间问题,而是你所拥有的地方:
if (moznosti(arr, tmp, a, b-1) == false)
因为moznosti方法返回一个布尔值,所以不需要检查它是否等于false或true,if语句括号仅在条件为真时传递。因此,在您的情况下,这可能更适用:
if (!moznosti(arr, tmp, a, b-1))
我认为大部分时间的部分是您检查基本情况的部分
if (moznosti(arr, tmp, a, b-1) == false)
答案 1 :(得分:0)
好的,我做到了!
public class BruteForceAttacker extends Thief {
private boolean konec;
@Override
public void breakPassword(int sizeOfPassword) {
moznosti(getCharacters(), "", getCharacters().length, sizeOfPassword);
}
public void moznosti(char [] arr, String pr, int a, int b) {
if (konec != true) {
if (b == 0) {
char [] heslo = pr.toCharArray();
if (tryOpen(heslo)) {
konec = true;
}
return;
}
for (int i = 0; i < a; i++) {
String tmp = pr+arr[i];
moznosti(arr, tmp, a, b-1);
}
}
}
}