Я бы сначала занялся этим, разбивая проблему на шаги Вы знаете, что хотите, чтобы в первой строке печатались символы, равные ширине. Итак, начните с этого: печатайте символ итеративно, используя ваш for l oop (и fini sh с println):
// always start with a complete row
for (int i = 0; i < width; i ++) {
System.out.print(drawChar);
}
System.out.println();
Далее, вы знаете, что хотите, чтобы второй-второй последние строки выведите символ, за которым следуют пробелы, после которых следует символ:
// for next set of rows, only print first and last
for (int j = 1; j < height; j ++) {
// print the first one
System.out.print(drawChar);
// print the spaces
for (int k = 1; k < width - 1; k ++) {
System.out.print(" ");
}
// print the last one
System.out.print(drawChar);
System.out.println();
}
Затем завершите sh, снова напечатав полный ряд (как вы делали для первого ряда).
Для сократить избыточный код, вы можете начать встраивать его в условия. Например, если это первая или последняя строка:
// print conditionally, depending on row number
for (int i = 0; i < height; i ++) {
// print a complete row if it's the first or last row
if (i == 0 || i == height - 1) {
for (int j = 0; j < width; j ++) {
System.out.print(drawChar);
}
System.out.println();
}
Вы можете создать оттуда, чтобы обеспечить точное представление ваших условий. Я думаю, что в вашем условном выражении смешаны логины строк и столбцов c.
for (int i = 0; i < height; i ++) {
for (int j = 0; j < width; j ++) {
// if in the first or last row or first or last column, print character
if(i == 0 || i == height - 1 || j == 0 || j == width - 1) {
System.out.print(drawChar);
} else {
// otherwise print space
System.out.print(" ");
}
// at end of row, start new line
if (j == width - 1) {
System.out.println();
}
}
}