Search code examples
javaloopsnested-loopsshapesascii-art

Output an ASCII diamond shape using loops


I am trying to write a program in Java that captures an integer from the user (assume data is valid) and then outputs a diamond shape depending on the size of the integer, i.e. User enters 5, output would be:

--*--
-*-*-
*---*
-*-*-
--*--

So far I have:

if (sqr < 0) {
    // Negative
    System.out.print("#Sides of square must be positive");
}
if (sqr % 2 == 0) {
    // Even
    System.out.print("#Size (" + sqr + ") invalid must be odd");
} else {
    // Odd
    h = (sqr - 1) / 2; // Calculates the halfway point of the square
    // System.out.println();
    for (j = 0; j < sqr; j++) {
        for (i = 0; i < sqr; i++) {
            if (i != h) {
                System.out.print(x);
            } else {
                System.out.print(y);
            }
        }
        System.out.println();
    }
}

Which just outputs:

--*--
--*--
--*--
--*--
--*--

I was thinking about decreasing the value of h but that would only produce the left hand side of the diamond.


Solution

  • void Draw(int sqr) {
        int half = sqr / 2;
        for (int row = 0; row < sqr; row++) {
            for (int column = 0; column < sqr; column++) {
                if ((column == Math.abs(row - half))
                        || (column == (row + half))
                        || (column == (sqr - row + half - 1))) {
                    System.out.print("*");
                } else {
                    System.out.print("_");
                }
            }
            System.out.println();
        }
    }
    

    Ok, now this is the code, but as I saw S.L. Barth's comment I just realised this is a homework. So I strongly encourage you to understand what is written in this code before using it as final. Feel free to ask any questions!