How to rotate, retreat and draw a triangle in java to print a trapezoid?

I tried to draw a trapezoid in Java. It worked out well. Now I'm trying to rotate my keystone without printing the code in the rotate () method. I was hoping I could do it. for example, call the rotate () method in my tester cluster and after calling the draw () method a rotated trapezoid will be printed. In general, I would like it to be. as

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

My second thought was that I would like to postpone one trapezoid. I would like to print a trapezoid in another drawing method (indentation).

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

Here is my code that I have found out so far

public class MyTrapezium { 
    // background character
    private char backgroundChar;

    // number of characters at the bottom line of the trapezium.
    private int bottomWidth;

    // foreground character.
    private char foreground;

    // number of lines used to draw the trapezium
    private int height;

    // the size of the margin in chars.
    private int margin = 5;

    // number of characters at the top line of the trapezium
    private int topWidth;

    // maximal number of characters per line used to draw the trapezium
    private int width = 30;



    // Creates a trapezium without a margin with the given width at the top and bottom.     
    public Trapezium(int topWidth, int bottomWidth) {
        this.topWidth = topWidth;
        this.bottomWidth = bottomWidth;
    }


    public MyTrapezium(int topWidth, int bottomWidth, char foreground, char background, int margin) {
        this.topWidth = topWidth;
        this.bottomWidth = bottomWidth;
        this.foreground = foreground;
        this.background = background;
        this.margin = margin;
    }

    // Creates a trapezium with the given width at the top and bottom and the size of the margin.

    public MyTrapezium(int topWidth, int bottomWidth, int margin) {
        this.topWidth = topWidth;
        this.bottomWidth = bottomWidth;
        this.margin = margin;
    }


    //Methods
    // Draws the trapezium with no indentation.
    public void draw() {
        int tw = topWidth;
        int bw = bottomWidth;
        height = bottomWidth - topWidth;

        while (tw <= bw) {
            for (int i = 0; i < margin; i++) {
                System.out.print(background);
            }
            printChar(background, height / 2);
            printChar(foreground, tw);
            printChar(background, height / 2);
            for (int i = 0; i < margin; i++) {
                System.out.print(background);
            }
            height -= 2;
            tw += 2;
        }
    }

    // Rotates the triangle 180 degrees without printing it
    public void rotate() {

    }

    // Draws the triangle with a given indentation.
    public void draw(int indentation) {
        int i = 0;
        while (i <= indentation) {
            System.out.print(" ");
            i++;
        }
    }

    // Prints a 'run' of a given character.
    private void printChar(char character, int length) {
        for (int i = 0; i < length; i++) {
            System.out.print(character);
        }
    }    

}



public class MyTester {
   public static void main(String[] args) {
        /** Creates and draws a new trapezium with given values.
        * The trapezium is rotated and should be drawn with indentation 15.
        */
        Trapezium t = new Trapezium(5, 11, '*', '-', 2);

        t.draw();
        t.rotate();
        t.draw(15);

    }
}

As you can see, I am afraid against the two methods rotate () and draw (...). Any advice is appreciated. Thank.

+4
source share
1 answer

ok, ... String [], , ...

private String[] buffer;

private void draw(){ //please rename 'draw' to 'print' this is confusiong else
    for (String line: buffer){
        System.out.println(line);
    }
}

public void create(int topWidth, int bottomWidth, char foreground, char background, int margin){
    //as done in your code
}

public void rotate(){
    String[] newBuffer = new String[buffer.length()];
    for(int i = 0; i < buffer.length(); i ++){
        newBuffer[buffer.length-1-i] = buffer[i];
    }
    buffer = newBuffer;
}

public void draw(int indent){
    String indentString = createIndent(indent);
    for(String line: buffer){
         System.out.println(indentString + line);
    }
}

private String createIndent(int indent){
    String str = "";
    for(int i = 0; i < indent; i ++){
       str = str + " ";
    }
    return str;
}
+1

All Articles