在控制台中绘制后在沙漏上的间距

时间:2014-08-27 06:44:16

标签: java

我需要帮助解决沙漏任务中的间距问题,这里有说明

说明

给定参数size = n和字符符号。

您可以假设n是正奇数。

沙漏由n行组成。

字符符号将在每一行中出现多次。该符号将在第一行中出现n次。打印符号在每个后续行中减少2的次数,直到达到1.之后,在每个后续行中打印符号的次数将增加2,直到再次达到n。

将空格添加到每行的开头和结尾,以使每行的总宽度为n,并且每行中的符号在每行的中心对齐。 对于输出,您可以使用System.out.print()/ println()或IO.output()/ outputln()。

这是我的代码:

public static void hourglass(int size, char symbol){
         int subtract = (int)Math.floor(size / 2);

        for(int i = size - subtract; i >= 1; i--){

          for(int j=i;j<size - subtract;j++)

              System.out.print(' ');

          for(int j=1;j<=i*2-1;j++)

              System.out.print(symbol);

              System.out.println();
        }

        for(int i = 2; i <= size - subtract; i++)
        {

         for(int j=i;j<size - subtract;j++)
             System.out.print(' ');

         for(int j=1;j<=i*2-1;j++)

             System.out.print(symbol);
             System.out.println();

        } 

      }

我想要做的就是指令集五。我已经阅读了很多关于阵列填充和\ s +的帖子来删除间距,但这不是我想要的。基本上我想要做的是在绘制沙漏之后在沙漏的左右两侧均匀间距。

她是我问题的一个例子:

鉴于沙漏的大小为3. printHourglass()的预期输出:

???¶
█?█¶
???¶

您的代码输出:

█???¶
██?¶
█???¶

我一直在努力解决,需要尽快提交。请再次提出一些提示。screenshot of problem

我已附上图片,以防文字无法正确显示问题。

2 个答案:

答案 0 :(得分:1)

您是否将代码粘贴到此处? 很抱歉,但格式非常糟糕。 请决定始终使用括号,但有时不使用括号。我建议你总是使用它们,因为它使事情变得更加清晰。还要保持良好的缩进:

public static void hourglass(int size, char symbol){

    int subtract = (int)Math.floor(size / 2);

    for(int i = size - subtract; i >= 1; i--){

        for(int j=i;j<size - subtract;j++){
          System.out.print(' ');
        }

        for(int j=1;j<=i*2-1;j++){
            System.out.print(symbol);
        }

        System.out.println();
    }

    for(int i = 2; i <= size - subtract; i++)
    {

        for(int j=i;j<size - subtract;j++){
            System.out.print(' ');
        }

        for(int j=1;j<=i*2-1;j++){
            System.out.print(symbol);
        }

        System.out.println();
    } 

}

接下来发布的代码是,我无法验证您的输出,因为我得到以下内容: (请注意:为了可见性,我使用?作为字符和a。而不是空格)

//Size 3
???
.?
???

//Size 5
?????
.???
..?
.???
?????

编辑1: 您需要做的是,在字符添加逻辑之后添加空格添加逻辑。 找到一个有效的循环逻辑是你的工作。

    for(int i = size - subtract; i >= 1; i--){

        for(int j=i;j<size - subtract;j++){
            System.out.print(' ');
        }

        for(int j=1;j<=i*2-1;j++){
            System.out.print(symbol);
        }

        for(/*find a working loop*/){
            System.out.print(' ');
        }

        System.out.println();
    }

    for(int i = 2; i <= size - subtract; i++)
    {

        for(int j=i;j<size - subtract;j++){
            System.out.print(' ');
        }

        for(int j=1;j<=i*2-1;j++){
            System.out.print(symbol);
        }

        for(/*find a working loop*/){
            System.out.print(' ');
        }

        System.out.println();
    } 

答案 1 :(得分:0)

我在Korashen的帮助下找到了循环,这就是我的代码看起来像所有打印完美的

代码打印由a表示的间距。以及在我看来提供完美输出的符号

public class hourglass
{
    public static void hourglass(int size, char symbol){
         int subtract = (int)Math.floor(size / 2);

        for(int i = size - subtract; i >= 1; i--){

          for(int j=i;j<size - subtract;j++){          
              System.out.print('.');
            }

          for(int j=1;j<=i*2-1;j++){          
              System.out.print(symbol);
            }

          for(int j = i; j < size - subtract; j++){
             System.out.print('.');
            }

              System.out.println();
        }

        for(int i = 2; i <= size - subtract; i++)
        {

         for(int j=i;j<size - subtract;j++){
             System.out.print('.');
            }

         for(int j=1;j<=i*2-1;j++){         
             System.out.print(symbol);
            }

         for(int j = i; j < size - subtract; j++){
             System.out.print(".");
            }

            System.out.println();
        } 

   }