i j 1 1 1 2 1 3 1 4 2 1 2 2 2 3 2 4 3 1 …You don't use it because it is difficult for a reader to understand. It is better to use two nested loops. Instead of
int i = 0; int j = 0; while(i < n) { doSomething(i,j); j++; if(j == m) { j = 0; i++; } }you would write
for(int i = 0; i < n; i++) { for(int j = 0; j < m; j++) { doSomething(i,j); } }The latter form is much more clear.
Since you are not allowed to put two loops in the body of a function, break out the inner loop into a separate function.
void dorow(int i, int m) { for(int j = 0; j < m; j++) { doSomething(i,j); } } … for(int i = 0; i < n; i++) { dorow(i, m); }Note how obvious that transformation is when the two nested loops are shown in a sensible way.