虽然这个问题已经被回答了,但是当我在学校看到它后,它引起了我的兴趣。今天回家后,我开始进行自己的实现。我想在这里分享一下,因为它可能对你有用。如果你想知道,我将所有东西都附加到StringBuilder
上,以避免潜在的错误,即System.out
打印流被其他进程使用并破坏图像。因此,只需一次性打印所有内容。
public class CharacterArt {
public static String makeACenteredTriangle(int height, int middleWidth, int sideBufferExtra) {
StringBuilder builder = new StringBuilder();
for (int row = 1; row <= height; row++) {
for (int b = 1; b <= height - row + sideBufferExtra; b++)
builder.append(' ');
for (int slash = 1; slash <= row; slash++)
builder.append('/');
for (int mid = 1; mid <= middleWidth; mid++)
builder.append('*');
for (int slash = 1; slash <= row; slash++)
builder.append('\\');
for (int b = 1; b <= height - row + sideBufferExtra; b++)
builder.append(' ');
builder.append('\n');
}
return builder.toString();
}
public static String makeADiamondsStrip(int sideLength, int numberDiamonds, int rowNumber) {
StringBuilder builder = new StringBuilder();
for (int number = 1; number <= numberDiamonds; number++) {
if (rowNumber <= sideLength)
for (int b = 1; b <= sideLength - rowNumber; b++) builder.append('.');
else
for (int b = 1; b <= rowNumber - sideLength - 1; b++) builder.append('.');
if (rowNumber <= sideLength)
for (int s = 1; s <= rowNumber; s++)
builder.append("/\\");
else
for (int s = 1; s <= rowNumber - 2 * (rowNumber - sideLength) + 1; s++)
builder.append("\\/");
if (rowNumber <= sideLength)
for (int b = 1; b <= sideLength - rowNumber; b++) builder.append('.');
else
for (int b = 1; b <= rowNumber - sideLength - 1; b++) builder.append('.');
}
return builder.toString();
}
public static String makeADivider(int totalWidth, int middleWidth, int sideWidth) {
StringBuilder builder = new StringBuilder();
int remainingEachSide = (totalWidth - middleWidth - 2 * sideWidth) / 2;
for (int i = 0; i < sideWidth; i++) builder.append('+');
for (int left = 1; left <= remainingEachSide; left++)
builder.append(left % 2 == 1 ? '=' : '*');
for (int middle = 1; middle <= middleWidth; middle++) builder.append('*');
for (int right = 1; right <= remainingEachSide; right++)
builder.append(right % 2 == 1 ? '=' : '*');
for (int i = 0; i < sideWidth; i++) builder.append('+');
return builder.toString();
}
public static void main(String[] args) {
StringBuilder builder = new StringBuilder();
builder.append(makeACenteredTriangle(5, 2, 1));
builder.append(makeADivider(14, 2, 1)).append('\n');
for (int i = 1; i <= 6; i++)
builder.append('|').append(makeADiamondsStrip(3, 2, i)).append('|').append('\n');
builder.append(makeADivider(14, 2, 1)).append('\n');
for (int i = 4; i <= 6; i++)
builder.append('|').append(makeADiamondsStrip(3, 2, i)).append('|').append('\n');
for (int i = 1; i <= 3; i++)
builder.append('|').append(makeADiamondsStrip(3, 2, i)).append('|').append('\n');
builder.append(makeADivider(14, 2, 1)).append('\n');
builder.append(makeACenteredTriangle(5, 2, 1));
System.out.println(builder.toString());
}
}
结果是:
/**\
//**\\
///**\\\
////**\\\\
/////**\\\\\
+=*=*=**=*=*=+
|../\..../\..|
|./\/\../\/\.|
|/\/\/\/\/\/\|
|\/\/\/\/\/\/|
|.\/\/..\/\/.|
|..\/....\/..|
+=*=*=**=*=*=+
|\/\/\/\/\/\/|
|.\/\/..\/\/.|
|..\/....\/..|
|../\..../\..|
|./\/\../\/\.|
|/\/\/\/\/\/\|
+=*=*=**=*=*=+
/**\
//**\\
///**\\\
////**\\\\
/////**\\\\\