我正在研究一种输出以下内容的方法:
**********
* *
* *
* Hello *
* *
* *
**********
我有一种需要使用.substring方法的感觉,但是为了弄清楚这一点已经被困了几个小时了。许多消息源告诉我要使用嵌套循环,这是我所做的,除了我尝试将消息放入形状时,由于字符串将星号char向右移,自然会增加额外的空间:< / p>
***********
* *
* *
* Hello *
* *
* *
***********
我正在使用Java8。int n是放置在图形顶部和底部的c个字符。在这种情况下,字符串消息会打招呼。
public void boxThing(int n, char c, String message) {
for(int i = 0; i <= (n/2); i++) {
for (int j = 0; j <= n; j++) {
if (i == 0 || i == n) {
System.out.print(c);
}
else if(j == 0 || j == n) {
System.out.print(c);
}
else if(j==n/2 && i==((n/2)/2)+1){
System.out.print(message);
}
else{
System.out.printf(" ");
}
}
System.out.println();
}
for(int i =0; i<=n; i++){
System.out.print(c);
}
}
答案 0 :(得分:0)
您必须将消息的长度加到j上并减去1,例如世界“ hello”处于5位置。由于j会在单词的循环中加1,因此您只需在达到第一个else条件时将j设置为j +消息长度-1。请参阅下面的内容。
for(int i = 0; i <= (n/2); i++) {
for (int j = 0; j <= n; j++) {
if (i == 0 || i == n) {
System.out.print(c);
}
else if(j == 0 || j == n) {
System.out.print(c);
}
else if(j==n/2 && i==((n/2)/2)+1){
System.out.print(message);
j=j+message.length()-1;
}
else{
System.out.print(" ");
}
}
System.out.println();
}
for(int i =0; i<=n; i++){
System.out.print(c);
}
}
答案 1 :(得分:0)
你快到了。
当“列”中包含您已打印的消息时,您不需要打印什么。
即。 “ Hello”是从索引3的列开始的5个字符。 这意味着索引3-7将已经包含“ Hello”,因此,您不应在此列之间打印任何字符。