2016-04-04 23 views
-3

Kodumu daha az zaman harcayarak nasıl kazanacağımı bilmiyorum. Görevim kaba kuvvet şifre kırılması yapmaktı. Şifrenin ne kadar olduğunu ve hangi karakterleri içerdiğini biliyordum. Şimdiye kadar bu yönteme sahibim.Java betiği sonlandırmak için çok zaman alıyor

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 şifre

. herhangi bir fikir?

+4

Ben senin soru [Stack Exchange Kod İnceleme Q & A] için daha uygun olduğuna inanıyoruz (http://codereview.stackexchange.com/) – Aziz

+0

Recursive fonksiyon => genellikle daha yavaş; Yinelemeli bir çözüm yapmaya çalışın ve nasıl çalıştığını görün. Ikinci @Aziz. Bu Kod Gözden Geçirme'ye gitmeli. –

cevap

0

Kod yapınıza bir bakın.

Moznosti yönteminizi yinelemeli olarak çağıran bir for döngüsünüz vardır ve her seferinde aynı şeyi yapan adı verilir.

Değişkenlerinizin ne anlama geldiğini bilmiyorum ama a ve b'nin 4 olduğunu varsayalım. İlk devreniz moznosti yönteminizi 4 kez aynı b parametresiyle çağırır.

bu kez soruna neden olduğunu ancak sahip olduğu değil o: moznosti yöntem bir Boole değeri döndürür Çünkü eğer sahte ya da gerçek eşit olmadığını

if (moznosti(arr, tmp, a, b-1) == false) 

, denetlemek gerekmez deyim ayraçları yalnızca durum doğru olduğunda geçer. Yani sizin durumunuzda bu daha geçerli olabilir:

if (!moznosti(arr, tmp, a, b-1)) 

ben size temel durum kontrol ediyoruz nerede çoğu zaman alıyor parçası olduğunu düşünüyorum

if (moznosti(arr, tmp, a, b-1) == false) 
+0

Basit bir boole kontrolü, özyinelemeli işlev çağrısı kadar zarar vermeyecekti. –

+0

@DebosmitRay Biliyorum, sadece buna gerek olmadığını işaret ediyordum. – Porteous96

+0

Bunun bir yorum olarak daha uygun olacağını düşünüyorum :) –

0

i did it Tamam!

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); 
     } 
    } 
} 

}