2017-08-02 16 views
1

Javaでforループをネストするときに問題があります。私の問題は、最初に、必要なループの数が正確にわからないことです。それは私のプログラムの途中で設定されています。だから私のプログラムは配列を作成すると言う。配列に3つの要素がある場合、私は以下のように3つのループを作成します。入れ子の 'for'ループに再帰を使用する方法

for(int i = 0; i<tab[0].length() ; i++){ 
    for(int j = 0; j<tab[1].length() ; j++){ 
     for(int k = 0; k<tab[2].length() ; k++){ 
      System.out.println(i+" "+j+" "+k); 
     } 
    } 
} 

私のプログラムは、4つの要素を持つ配列を作成した場合、それは次のようになります:

for(int i = 0; i<tab[0].length() ; i++){ 
    for(int j = 0; j<tab[1].length() ; j++){ 
     for(int k = 0; k<tab[2].length() ; k++){ 
      for(int h = 0; h<tab[3].length() ; h++){ 
       System.out.println(i+" "+j+" "+k+" "+h); 
      } 
     } 
    } 
} 

いずれかは、どのように再帰でこれを行うには教えてもらえますか?私は2つのネストされたループを持つことができますが、私はそれらの10個を持つことができ、いつも最後にはすべてのループ(i、j、k、h)に関連するコンソール番号で印刷したいと思います

答えて

3

ここには解決策があります。各再帰呼び出しでpreviousTabsは1長くなり、tabsは1になります。

public static void iterate(int[] previousValues, int[] tabs) { 
    if (tabs.length == 0) { 
     System.out.println(Arrays.toString(previousValues)); 
    } 
    else { 
     final int[] values = new int[previousValues.length + 1]; 
     for (int i = 0; i < previousValues.length; i++) { 
      values[i] = previousValues[i]; 
     } 
     final int[] nextTabs = new int[tabs.length - 1]; 
     for (int i = 0; i < nextTabs.length; i++) { 
      nextTabs[i] = tabs[i + 1]; 
     } 
     for (int i = 0; i < tabs[0]; i++) { 
      values[values.length - 1] = i; 
      iterate(values, nextTabs); 
     } 
    } 
} 
public static void iterate(int[] tabs) { 
    iterate(new int[0], tabs); 
} 
関連する問題