# Dynamic for loop

• 02-07-2010, 07:07 PM
vikrambatra1709
Dynamic for loop
Hi,

i am trying to solve this problem where i need combinations of indexes

1. i have a number of drop down boxes. This number can change. Take it as 4 for example
2. each drop down has a number of options which can also vary. Suppose in this case
drop down 1 has 2 values
drop down 2 has 3 values
drop down 3 has 5 values
drop down 4 has 2 values
3. I need to generate permutation of all the values depending on the number of drop downs and number of options in each drop down. i need the index number combinations of all the possible combinations of drop down boxes as output.

4. output in this case needs to be
1111 , 1112, 1121, 1122, 1131, 1132, 1141, 1142, 1151, 1152, 1211, 1212, 1221, 1222, 1231, 1232... and so on.

5. i can not use nested for loop as the number of drop downs can change.

• 02-07-2010, 07:14 PM
vikrambatra1709
i had written a sample code for 3 drop downs which is working fine...i just want to make it generic
Code:

```public class Test {         public static void main(String args[])         {                 int size = 3;                 int [] ls = {2,3,5};                 int loop=1;                 int length = ls.length;                 int [] lInt = new int[length];                 int [] vals = new int[length];                                         for(int i=0;i<length;i++)                 {                         loop = loop *ls[i];                         lInt[i] = ls[i];                         vals[i] = 1;                 }                                System.out.println("loop "+loop);                 for(int i=1;i<=loop;i++)                 {                         if(vals[length-1]<=lInt[length-1])                         {                                 for(int x=0;x<length;x++)                                 {                                         System.out.print(vals[x]+" ");                                 }                                 System.out.println();                                 vals[length-1]++;                                 continue;                         }                         else                         {                                 vals[length-1] = 1;                                 vals[length-2]++;                                 if(vals[length-2]<=lInt[length-2])                                 {                                         for(int x=0;x<length;x++)                                         {                                                 System.out.print(vals[x]+" ");                                         }                                         System.out.println();                                         vals[length-1]++;                                 }                         }                         if(vals[length-2]>lInt[length-2])                         {                                 vals[length-1]=1;                                 vals[length-2]=1;                                 vals[length-3]++;                                 for(int x=0;x<length;x++)                                 {                                         System.out.print(vals[x]+" ");                                 }                                 System.out.println();                                 vals[length-1]++;                         }         }         } }```
• 02-07-2010, 07:36 PM
JosAH
Maybe this helps:

Code:

```import java.util.Arrays; public class Combination {         public static boolean combine(int[] c, int[] m) {                         for (int i= m.length; --i >= 0;)                         if (++c[i] < m[i])                                 return true;                         else                                 c[i]= 0;                 return false;         }         public static void main(String[] args) {                                         int[] x= new int[3];        // all zeros to start with                         int[] m= { 3, 2, 4 };        // the allowed maximum values                         do {                                 System.out.println(Arrays.toString(x));                         }                         while(combine(x, m));         } }```
kind regards,

Jos
• 02-08-2010, 09:11 AM
vikrambatra1709
Hey....Thanks Joes....this worked.... :)