これに対処する方法はたくさんあります。また、行単位で画像を描画する答えが1つあります。
char[][]
を作成し、その配列の配列内の文字を画面に表示するルーチンをすでに持っていると仮定します。あたかも既にsetPoint()
メソッドを持っているかのように見えて、構造体にポイントを突き刺します。
初心者として、私はそれがあなたに解決策を与えるのに役立つとは思わない。自分自身で解決するには、正しい方向を指す必要があります。
多くの経験豊富なコーダーでは、テストドリブンデザインを使用しています。これから学ぶことができます:単純なケースから始め、そのテストを作成し、そのテストをパスし、書き込むテストがなくなるまで。
最後に、jUnitのようなテストフレームワークを学ぶ必要がありますが、今はプログラムを実行するだけで "テスト"できます。だから最初のテストは、それはheight == 1
のために働くのですか?
あなたはと(今その手段のために、プログラムを実行し、出力が右に見えることを確認)このテストに合格することができます
public void drawTriangle(int height) {
drawing.setPoint(0,5,'*')
}
仕事を行って。
今
それはheight==2
のために働くようにする:
public void drawTriangle(int height) {
drawing.setPoint(0,5,'*');
if(height == 2) {
drawing.setPoint(1,4,'*');
drawing.setPoint(1,5,'*');
drawing.setPoint(1,6,'*');
}
}
これはまだheight == 1
のために動作しますが、またheight == 2
のために働きます。
しかし、ループがこれらの3つのコマンドを2番目の行に置き換える機会をすぐに見ることができます。だから、:
public void drawTriangle(int height) {
drawing.setPoint(0,5,'*');
if(height == 2) {
for(int 4; i<7; i++) {
drawing.setPoint(1,i,'*');
}
}
}
...そして、あなたはメソッドにそれを引き出すことができます。これは、はリファクタリングと呼ばれている
public void drawTriangle(int height) {
drawing.setPoint(0,5,'*');
if(height == 2) {
drawRow2();
}
}
private void drawRow2() {
for(int 4; i<7; i++) {
drawing.setPoint(1,i,'*');
}
}
- 働く何かを書くことが、最善の方法を書かれていませんそれが動作することを確認するためにテストし、一度に1ステップずつ書かれた方法を変更するので、それはまだ動作しますが、ちょっとした方法で動作します。
うまくいけば、これがどこにあるのか分かります。 drawRow2()
をより一般的なもの(drawRow(int rowNumber)
)に変更し、その中のリテラル番号を徐々にrowNumber
から派生した変数に置き換えることができます。次に、drawRow(0)
を使用して最初の行を描画し、drawRow(1)
を使用して2番目の行を描画することができます。次に、drawRow(2)
を追加して3行の三角形を描くことができます。そして、代わりにループを使用して改善することができます。
期待している出力は何ですか? – bradimus
@bradimus私はそれを更新しました –
h <= 0でない限り、あなたはwhileループを入力することはありません。そうであればforループも入力しません。 – dogwin