Существует множество способов решить эту проблему, и вы уже видели один ответ, который рисует изображение подряд за строкой.
Я предполагаю, что у вас уже есть подпрограммы для создания char[][]
и для печати символов в этом массиве массивов на экран. Похоже, что у вас уже есть метод setPoint()
, чтобы вытолкнуть точку в структуру.
Как новичок, я не думаю, что это поможет вам получить решение. Вы должны быть направлены в правильном направлении, чтобы решить эту проблему самостоятельно.
Многие опытные кодировщики теперь используют Test Driven Design, и вы можете узнать из этого: начать с простого случая, создать тест для этого, сделать этот тест, повторить с большим количеством тестов, пока не будет больше тестов для записи ,
В конце концов вы должны изучить тестовую структуру, такую как 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
.
Но вы можете сразу увидеть возможность для цикла заменить эти три команды для второй строки. Итак:
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,'*');
}
}
Это называется рефакторинга - писать то, что работает, но не написано, что лучший способ , тестируя его, чтобы убедиться, что он работает, а затем изменил способ его написания на один шаг за раз, поэтому он все еще работает, но более аккуратным способом.
Надеюсь, вы увидите, где это происходит. Вы можете изменить drawRow2()
, чтобы быть более общим - drawRow(int rowNumber)
, и постепенно заменять буквальные числа там переменными, происходящими от rowNumber
. Затем вы можете использовать drawRow(0)
, чтобы нарисовать первую строку, и drawRow(1)
, чтобы нарисовать вторую. Затем вы можете нарисовать треугольник трех строк, добавив drawRow(2)
, а затем вы можете улучшить это, используя вместо этого цикл.
Какой выходной сигнал вы ожидаете? – bradimus
@bradimus Я обновил его –
Если h <= 0, вы никогда не войдете в цикл while, и если это так, вы тоже не войдете в цикл for. – dogwin