Is it possible to print rhombus numbers using a single loop?

I am talking about printing this pattern

       1
      121
     12321
    1234321
   123454321
  12345654321
 1234567654321
123456787654321

It is very easy to do with using more than a single for loop. But I was trying to implement it using a single for loop but not able to do so.
Is it possible?
If yes, then I would really like to see how is it possible to see it being used with out any predefined functions like reverse() etc available that itself use a loop inside them.
Just a simple single “for” loop.

Here is a way to write out this pattern using only one loop:

class RhombusNumbers{

    public static void main(String[] args){
        String left = "";
        int max = 8;
        for(int i = 1; i <= max; i++){
            System.out.println(left + i + new StringBuilder(left).reverse().toString());
            left+=i;
        }
    }

}

It keeps track of the left digits and adds a new digit on every time.

EDIT:

Without StringBuilder since StringBuilder.reverse() uses a loop and would also reverse a 10:

class RhombusNumbers{

    public static void main(String[] args){
        String left = "";
        String right = "";
        int max = 8;
        for(int i = 1; i <= max; i++){
            System.out.println(left + i + right);
            left+=i;
            right = i + right;
        }
    }

}

You can sovle it with recursion:

class Rhombus {
  public static void left(int x) {
    if (--x > 0) {
      left(x);
      System.out.print(x);
    }
  }

  public static void right(int x) {
    if (--x > 0) {
      System.out.print(x)
      right(x);
    }
  }

  public static void main(String[] args) {
    for (int i = 1; i <= 3; i++) {
      left(i);
      System.out.print(i);
      right(i);
      System.out.println();
    }
  }
}

Using the fact that

1*1 = 1
11*11 = 121
111*111= 12321 
 ....

you can do something like this:

public static void main(String[] args) { 
    int j = 0;
    for(long i = 1 ; i<1000000000; i = i+(long)Math.pow(10, j)){
        System.out.println(i*i);
        j++;
    }
}

Try this.

StringBuilder sb = new StringBuilder();
for (int i = 1; i <= 8; ++i) {
    System.out.println(sb.append(i)
        + new StringBuilder(sb).reverse().substring(1));
}

A recursive solution:

private static void print(int n, int max, boolean increment) {
    if (n > 0) {
        System.out.print(n);
        if (n == max) {
            print(n - 1, max, false);
        } else if (increment) {
            print(n + 1, max, increment);
        } else {
            print(n - 1, max, increment);
        }
    }
}

public static void main(String[] args) throws Exception {
    for (int i = 1 ; i < 10;i++) {
        print(1, i, true);
        System.out.println();
    }
}

like this by C.

#include <stdio.h>

int main(void){
    for(int i = 1, n = 1, d = 1; n <= 8; i += d){
        if(i == n){
            d = -d;
        } else if(i == 0){
            d = -d;
            ++n;
            puts("");
            continue;
        }
        printf("%d", i);
    }
}