Каждая строка может быть разделена на три области: Первая область состоит из пробелов, расположенных от включающего индекса A
до включающего индекса B
.Вторая область содержит текст, расположенный от включающего индекса C
до включающего индекса D
.И третья область снова состоит из пробелов, расположенных от включающего индекса E
до включающего индекса F
.Боковые трубы расположены по индексам 0
и width + 1
:
|A......BC......DE......F|
. Первая и третья области имеют длину width/2 - text/2
, где text
обозначает длину текста.
Тогда индексы:
Index A: 1
Index B: width/2 - text/2
Index C: B + 1
Index D: width/2 + text/2
Index E: D + 1
Index F: width
В цикле необходимые символы могут отображаться в соответствующей области:
// Code: label of book
int width = 3 * SIZE;
width = (width % 2 == 0) ? width : width - 1; // if the width is odd, choose the next smallest even number
String text = "Building Java Programs";
for(int j = 1; j <= width; j++) {
if (j <= width / 2 - text.length() / 2) { // j <= Index B
System.out.print(" ");
}
else if (j >= width / 2 + text.length() / 2 + 1) { // j >= Index E = Index D + 1
System.out.print(" ");
}
else {
System.out.print(text);
j = width / 2 + text.length() / 2; // j = Index D
}
}
Конечно, первый иВторые if
-элементы также могут быть реализованы в комбинации.
Выход (SIZE = 8
, width = 24
):
Without text...
| |////////
| |//////
| |////
| |//
With text...
| Building Java Programs |////////
| Building Java Programs |//////
| Building Java Programs |////
| Building Java Programs |//
С каждой стороны по одному пробелу (1 + 22 + 1 = 24
)).
Выход (SIZE = 10
, width = 30
):
Without text...
| |//////////
| |////////
| |//////
| |////
| |//
With text...
| Building Java Programs |//////////
| Building Java Programs |////////
| Building Java Programs |//////
| Building Java Programs |////
| Building Java Programs |//
С каждой стороны по четыре пробела (4 + 22 + 4 = 30
).
Выход (SIZE = 13
, width = 38
):
Without text...
| |/////////////
| |///////////
| |/////////
| |///////
| |/////
| |///
With text...
| Building Java Programs |/////////////
| Building Java Programs |///////////
| Building Java Programs |/////////
| Building Java Programs |///////
| Building Java Programs |/////
| Building Java Programs |///
С каждой стороны по восемь пробелов (8 + 22 + 8 = 38
).