有没有一种方法可以打印出文本而不添加空格?

时间:2019-07-29 06:07:17

标签: java nested-loops

我正在研究一种输出以下内容的方法:

**********
*        *
*        *
*  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);
        }
    }

2 个答案:

答案 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”,因此,您不应在此列之间打印任何字符。

相关问题