如何在java中旋转,缩进和绘制三角形以打印梯形?

时间:2015-05-17 18:58:22

标签: java

我试图在Java中绘制一个梯形图。结果很好。现在我正在尝试旋转我的梯形而不在方法rotate()中打印代码。我希望我能做某事。比如在我的testerclass中调用方法rotate()并在调用方法draw()之后,将打印一个旋转的梯形。总而言之,我想要......像

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

我的第二个想法是,我想缩进一个单一的梯形。我想用我的其他绘图(缩进)方法打印梯形。

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

这是我到目前为止找到的代码

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);

    }
}

正如你所看到的那样,我正在努力克服两种方法rotate()和draw(...)。欢迎任何建议。谢谢。

1 个答案:

答案 0 :(得分:1)

好吧,一种方法是创建一个缓冲区并打印出来...... 缓冲区是String [],其中每个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;
}