2

在学校作业中,我们必须在 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()课堂上旋转这个梯形。所以它看起来像:

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

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

4

1 回答 1

0

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

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

int currentWidth = tWidth;

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

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

编辑:如果rotate应该改变梯形的属性,而不是打印倒置的梯形,那么这也应该很容易,因为你已经固定printTrapezoid不改变tWidthand bWidth,所以现在你可以做你需要做的事情来改变它们(通过交换值)。

于 2013-11-08T23:35:06.767 回答