2015-11-09 2 views
-2

я сталкиваюсь с трудностями при коррекции потока этого алгоритма ..Как я могу контролировать поток рекурсивных методов?

для String h = "##" этого алгоритм дает правильный вывод, который:

ReemReem 
ReemRawan 
RawanReem 
RawanRawan 

и String h = "00" этому алгоритм дает правильный вывод, который:

00 
01 
02 
03 
04 
05 
06 
07 
08 
09 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
22 
23 
24 
25 
26 
27 
. 
. 
. 
98 
99 

и String h = "#0" этот алгоритм дает правильный вывод, который:

Reem0 
Reem1 
Reem2 
Reem3 
Reem4 
Reem5 
Reem6 
Reem7 
Reem8 
Reem9 
Rawan0 
Rawan1 
Rawan2 
Rawan3 
Rawan4 
Rawan5 
Rawan6 
Rawan7 
Rawan8 
Rawan9 

но String h ="##0" этот алгоритм дает мне неправильный вывод, который:> ReemReem0

ReemReem1 
ReemReem2 
ReemReem3 
ReemReem4 
ReemReem5 
ReemReem6 
ReemReem7 
ReemReem8 
ReemReem9 
ReemRawanReem 
ReemRawanRawan 
RawanReem0 
RawanReem1 
RawanReem2 
RawanReem3 
RawanReem4 
RawanReem5 
RawanReem6 
RawanReem7 
RawanReem8 
RawanReem9 
RawanRawanReem 
RawanRawanRawan 

, а также для string h ="#0#" этот алгоритм дает неправильный вывод, который:

Reem0Reem 
Reem0Rawan 
Reem10 
Reem11 
Reem12 
Reem13 
Reem14 
Reem15 
Reem16 
Reem17 
Reem18 
Reem19 
Reem20 
Reem21 
Reem22 
Reem23 
Reem24 
Reem25 
Reem26 
Reem27 
Reem28 
Reem29 
Reem30 
Reem31 
Reem32 
Reem33 
Reem34 
Reem35 
Reem36 
Reem37 
Reem38 
Reem39 
Reem40 
Reem41 
Reem42 
Reem43 
Reem44 
Reem45 
Reem46 
Reem47 
Reem48 
Reem49 
Reem50 
Reem51 
Reem52 
Reem53 
Reem54 
Reem55 
Reem56 
Reem57 
Reem58 
Reem59 
Reem60 
Reem61 
Reem62 
Reem63 
Reem64 
Reem65 
Reem66 
Reem67 
Reem68 
Reem69 
Reem70 
Reem71 
Reem72 
Reem73 
Reem74 
Reem75 
Reem76 
Reem77 
Reem78 
Reem79 
Reem80 
Reem81 
Reem82 
Reem83 
Reem84 
Reem85 
Reem86 
Reem87 
Reem88 
Reem89 
Reem90 
Reem91 
Reem92 
Reem93 
Reem94 
Reem95 
Reem96 
Reem97 
Reem98 
Reem99 
Rawan0Reem 
Rawan0Rawan 
Rawan10 
Rawan11 
Rawan12 
Rawan13 
Rawan14 
Rawan15 
Rawan16 
Rawan17 
Rawan18 
Rawan19 
Rawan20 
Rawan21 
Rawan22 
Rawan23 
Rawan24 
Rawan25 
Rawan26 
Rawan27 
Rawan28 
Rawan29 
Rawan30 
Rawan31 
Rawan32 
Rawan33 
Rawan34 
Rawan35 
Rawan36 
Rawan37 
Rawan38 
Rawan39 
Rawan40 
Rawan41 
Rawan42 
Rawan43 
Rawan44 
Rawan45 
Rawan46 
Rawan47 
Rawan48 
Rawan49 
Rawan50 
Rawan51 
Rawan52 
Rawan53 
Rawan54 
Rawan55 
Rawan56 
Rawan57 
Rawan58 
Rawan59 
Rawan60 
Rawan61 
Rawan62 
Rawan63 
Rawan64 
Rawan65 
Rawan66 
Rawan67 
Rawan68 
Rawan69 
Rawan70 
Rawan71 
Rawan72 
Rawan73 
Rawan74 
Rawan75 
Rawan76 
Rawan77 
Rawan78 
Rawan79 
Rawan80 
Rawan81 
Rawan82 
Rawan83 
Rawan84 
Rawan85 
Rawan86 
Rawan87 
Rawan88 
Rawan89 
Rawan90 
Rawan91 
Rawan92 
Rawan93 
Rawan94 
Rawan95 
Rawan96 
Rawan97 
Rawan98 
Rawan99 

это мой алгоритм:

package finalprogram; 

public class FinalProgram { 

    static String[] chars = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9"}; 
    static String[] names = {"Reem", "Rawan"}; 
    static int i = 0; 
    static boolean flag = true; 
    static String h = ""; 

    static void GenerateAllPasswordsWords(String pwd, int pos, int siz) { 

     if (pos < siz) { 

      if (h.charAt(i) == '#') { 
       //System.out.println("from if rule=#"); 
       //System.out.println("i= " + i); 
       for (String ch1 : names) { 
        i++; 
        GenerateAllPasswordsWords(pwd + ch1, pos + 1, siz); 
       } 
      } 
      if (h.charAt(i) == '0') { 
       // System.out.println("from else rule=0"); 
       // System.out.println("i= " + i); 

       for (String ch : chars) { 
        i++; 
        GenerateAllPasswordsWords(pwd + ch, pos + 1, siz); 

       } 

      } 

     } else { 
      System.out.println(pwd); 
     } 
     i = 0; 
    } 

    public static void main(String[] args) { 
     h = "#0#"; 
     GenerateAllPasswordsWords("", 0, h.length()); 
    } 

} 

Я знаю проблему с увеличением переменной i внутри цикла for, но я понятия не имею, как ее исправить.

+0

отладить. Вы можете легко выяснить эту проблему. –

+0

Я использую статическую глобальную переменную для вашего 'charAt (i)' isn't, что вы ищете, вы скорее захотите использовать параметр 'pos'. – SomeJavaGuy

+0

Anoop-LL я знаю, где проблема, но проблема в том, как ее исправить –

ответ

1

Вашего метод код, чтобы создать все вещи должны скорее выглядеть следующим образом

Вы используете i для двух целей, для итерации положение вашей переменной h. У вас уже есть переменная pos, используйте ее.

Теперь вам не нужно i, потому что он никогда не использовался и не имел смысла там с самого начала.

static void GenerateAllPasswordsWords(String pwd, int pos, int siz) { 

    if (pos < siz) { 
     if (h.charAt(pos) == '#') { // Dont use i here, you have pos as your current position parameter 
      for (String str : names) { 
       GenerateAllPasswordsWords(pwd + str, pos + 1, siz); 
      } 
     } 
     if (h.charAt(pos) == '0') { 
      for (String str : chars) { // Why do you use i 
       GenerateAllPasswordsWords(pwd + str, pos + 1, siz); 
      } 
     } 

    } else { 
     System.out.println(pwd); 
    } 
} 
2

Совместное измененное состояние и рекурсия - очень плохое совпадение.
С рекурсивными функциями вы почти всегда хотите поддерживать состояние вычисления в параметрах функции и возвращаемых значениях.
(Это хорошая идея, не рекурсивных функций, тоже.)

Вам даже не нужно i, вы должны использовать параметр pos.
И параметр размера не нужен, так как вы знаете длину ввода.

автономный вариант может выглядеть следующим образом:

static void GenerateAllPasswordsWords(String input, int pos, String pwd) { 
    if (pos < input.length()) { 
     if (input.charAt(pos) == '#') { 
      for (String ch1 : names) { 
       GenerateAllPasswordsWords(input, pos + 1, pwd + ch1); 
      } 
     } 
     else if (input.charAt(pos) == '0') { 
      for (String ch : chars) { 
       GenerateAllPasswordsWords(input, pos + 1, pwd + ch); 

      } 
     } 
    } else { 
     System.out.println(pwd); 
    } 
} 

static void GenerateAllPasswords(String input) 
{ 
    GenerateAllPasswordsWords(input, 0, ""); 
} 
0

это алгоритм после коррекции

общественного класса FinalProgram {

static String[] chars = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9"}; 
static String[] names = {"Reem", "Rawan"}; 
static String h = ""; 

static void GenerateAllPasswordsWords(String pwd, int pos, int siz) { 

    if (pos < siz) { 

     if (h.charAt(pos) == '#') { 
      for (String ch1 : names) { 

       GenerateAllPasswordsWords(pwd + ch1, pos + 1, siz); 
      } 
     } 
     if (h.charAt(pos) == '0') { 

      for (String ch : chars) { 

       GenerateAllPasswordsWords(pwd + ch, pos + 1, siz); 

      } 

     } 

    } else { 
     System.out.println(pwd); 
    } 
} 

public static void main(String[] args) { 
    h = "0##0"; 
    GenerateAllPasswordsWords("", 0, h.length()); 
} 

}

Смежные вопросы