2016-04-04 39 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; 
} 

}