これが、フォーマットを使用した最後の最後の試みです。
public static void main(String[] args) {
int steps = 5;
for (int x = 0; x < steps; x++) {
System.out.format(((steps == (x + 1)) ? "" : ("%"
+ ((steps - x - 1) * 5) + "s"))
+ " o ******"
+ ((x == 0) ? "" : ("%" + (x * 5) + "s"))
+ "*\n", " ", " ");
System.out.format(((steps == (x + 1)) ? "" : ("%"
+ ((steps - x - 1) * 5) + "s"))
+ " /|\\ * "
+ ((x == 0) ? "" : ("%" + (x * 5) + "s"))
+ "*\n", " ", " ");
System.out.format(((steps == (x + 1)) ? "" : ("%"
+ ((steps - x - 1) * 5) + "s"))
+ " / \\ * "
+ ((x == 0) ? "" : ("%" + (x * 5) + "s"))
+ "*\n", " ", " ");
}
for (int i = 0; i < (steps + 1) * 5 + 2; i++) {
System.out.print("*");
}
}
出力:
o *******
/|\ * *
/ \ * *
o ****** *
/|\ * *
/ \ * *
o ****** *
/|\ * *
/ \ * *
o ****** *
/|\ * *
/ \ * *
o ****** *
/|\ * *
/ \ * *
********************************
\ o /
以下のアプローチも面白いですが(ユーモアの好みによって異なります)、完全な解決策ではありません。
for (String s = " o ***** /|\\ * / \\ * "; s
.charAt(8) != '*'; s = s.substring(5, s.length() / 3) + " "
+ s.substring(s.length() / 3 + 5, 2 * s.length() / 3) + " "
+ s.substring(2 * s.length() / 3 + 5, s.length()) + " ") {
System.out.println(s.substring(0, s.length() / 3) + "*");
System.out
.println(s.substring(s.length() / 3, 2 * (s.length() / 3))
+ "*");
System.out.println(s.substring(2 * (s.length() / 3), s.length())
+ "*");
}
出力:
o ******
/|\ * *
/ \ * *
o ***** *
/|\ * *
/ \ * *
o ***** *
/|\ * *
/ \ * *
o ***** *
/|\ * *
/ \ * *
o ***** *
/|\ * *
/ \ * *