在学校的作业中,我们必须在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
而不更改tWidth
和bWidth
,所以现在您可以执行所需的操作进行更改(通过交换值)。关于java - 如何在Java中旋转星号梯形?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19870273/