在学校的作业中,我们必须在Java中绘制一个带有星号的梯形。构造函数就像
Trapezoid(int tWidth, int bWidth, char signA, char signB, int margin)
tWidth:是顶部宽度,bWidth:底部宽度,signA:前景符号,signB:背景符号,margin:bWidth的边距(左右)。

我的main()类看起来像这样:

Trapezoid t = new Trapezoid(3, 9, '*', '-', 2);
t.printTrapezoid();

那么它应该看起来像这样:
-----***-----
----*****----
---*******---
--*********--
printTrapezoid()方法如下所示:
int width = 2* margin + bWidth;
int length = (width - tWidth) / 2;

while (tWidth <= bWidth) {
    printChar(signB, length);
    printChar(signA, tWidth);
    printChar(signB, length);
    System.out.println();
    tWidth++;
}

printChar()方法如下所示:
printChar(char signB, int length) {
    for (int i = 0; i < length; i++) {
        System.out.print(signB);
    }
}

所以。这对我来说很好。但是我认为还有其他更好的解决方案。下一个练习是仅使用t.rotate()类中的main()旋转此梯形。这样看起来像:
--*********--
---*******---
----*****----
-----***-----

我不知道该怎么做。有人可以给我提示吗?
拜托,我不要这里的解决方案。只是一个提示,我该如何解决。重构重构方法也许更好?我不知道...

最佳答案

您还没有向我们展示整个Trapezoid类,但是我猜测它具有在构造函数中设置的tWidth字段。

如果是这种情况,则您的printTrapezoid方法不应更改它。该字段,即“顶部宽度”,是梯形的一个属性,在打印出来时不应更改。因此,在printTrapezoid中,您应该声明一个类似于

int currentWidth = tWidth;

然后该方法应修改此局部变量,而不是tWidth字段。

完成此操作后,通过使currentWidth以相反的顺序变为相同的值,非常简单地了解如何打印上下颠倒的梯形。

编辑:如果rotate应该更改梯形的属性,而不是打印上下颠倒的梯形,那么这也应该很容易,因为您已经固定了printTrapezoid而不更改tWidthbWidth,所以现在您可以执行所需的操作进行更改(通过交换值)。

关于java - 如何在Java中旋转星号梯形?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19870273/

10-10 13:57