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 に答える