2016-04-04 3 views
-1

Ich kann var stop nicht speichern, damit es für Zyklus anhalten kann. Ich brauche nur, wenn tryOpen wahr ist, um diese Methode zu beenden und Rekursion zu stoppen.Java var aus Anweisung speichert nicht

public void moznosti(char [] arr, String pr, int a, int b) { 
     boolean stop = false; 
     if (b == 0) { 
      char [] heslo = pr.toCharArray(); 
      for (int i = 0; i < heslo.length; i++) { 
       System.out.print(heslo[i]); 
      } 
      System.out.println(); 
      if (tryOpen(heslo)) { 
       stop = true; 
       System.out.println("END"); 
      } 
      return; 
     } 
     if (stop == false) { 
      for (int i = 0; i < a; i++) { 
       String tmp = pr+arr[i]; 
       moznosti(arr, tmp, a, b-1); 
      } 
     } 
    } 
+0

Ihre Frage ist nicht wirklich klar. Wenn Sie jedoch denken, dass Sie "Stopp" in einem rekursiven Aufruf festlegen können und dass die anderen rekursiven Aufrufe es sehen können, liegen Sie falsch. Für jeden rekursiven Aufruf gibt es eine separate lokale Variable "stop". Erwägen Sie die Verwendung eines 'return', um zwischen rekursiven Aufrufen zu kommunizieren. – ajb

+0

Vielleicht brauchen Sie 'stop', um keine lokale Variable zu sein? könnte ein Rückgabewert sein. – Thilo

+0

Sie meinen nicht void aber boolean zu haben? – NightRain

Antwort

0

Stop ist eine lokale Variable hier. Wenn Sie es zu einer statischen globalen Variable machen, wird es funktionieren, aber beachten Sie, dass Sie es vor jedem Aufruf von moznosti auf false setzen müssen.

Das obige wird funktionieren, aber es ist nicht so gut von einer Praxis.

Die beste Methode wäre, die Funktion wahr zu machen, wenn sie erfolgreich ist. Dann können Sie den Erfolg überprüfen, bevor weitere rekursive Aufrufe zu machen:

if (b == 0) { 
     char[] heslo = pr.toCharArray(); 
     for (int i = 0; i < heslo.length; i++) { 
      System.out.print(heslo[i]); 
     } 
     System.out.println(); 
     if (tryOpen(heslo)) { 
      System.out.println("END"); 
     } else { 
      for (int i = 0; i < a; i++) { 
       String tmp = pr + arr[i]; 
       if (moz(arr, tmp, a, b - 1)) { 
        return true; 
       } 
      } 
     } 
    } 
0

Vielen Dank für Hilfe, ist es das, was ich tat, jetzt ist es funktioniert, aber es ist langsam ...

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

}

Verwandte Themen