2016-04-04 67 views
-1

我无法保存var stop,因此可以停止循环。当tryOpen为true时,我只需要退出该方法并停止递归。来自语句的Java var无法保存

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

你问题不是很清楚。但是,如果您认为可以在一次递归调用中设置“stop”,并且其他递归调用将能够看到它,那么您就错了。每个递归调用都有一个单独的局部变量'stop'。考虑使用'return'在递归调用之间进行通信。 – ajb

+0

也许你需要'停下来'不是一个局部变量?可能是一个返回值。 – Thilo

+0

你的意思是没有void但布尔值? – NightRain

回答

0

停止是一个局部变量。如果你使它成为一个静态的全局变量,它将起作用,但是请注意,每次调用moznosti之前你必须将它设置为false。

上面的工作,但它不是一个很好的做法。

最好的方法是让你的函数成功时返回true。然后,你可以做任何更多的递归调用之前检查的成功:

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

感谢您的帮助,这是我做的,现在它的工作,但它是慢...

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

}