黑马程序员技术交流社区

标题: 求助,如何打印 [打印本页]

作者: 清净明诲    时间: 2014-7-13 08:43
标题: 求助,如何打印
如何打印空心的等腰三角形,如何打印空心的菱形???
如何打印呢,?

作者: OCTSJimmy    时间: 2014-7-13 10:18
本帖最后由 OCTSJimmy 于 2014-7-13 10:29 编辑

设有需求要打印一个五行的等腰三角形,如下图所示,其中,“-”代表三角形左侧的空格,“_”代表三角形中的空格:
空心的等腰三角形分析流程:
----x
---x_x
--x___x
-x_____x
xxxxxxxxx

首先可以将上图看成两个三角形,对,一个由左侧空格组成的倒三角形。
那么,倒三角形会打印吧?
对了,大圈套小圈:
for(int x=0;x<4;x++)
{
     for(int y=x;y<4;y++)
     {
         System.out.print(" ");
     }
     System.out.println();
}
接着打印等腰三角形,其中要求是空心的:
那么,先做实心的,也是大圈套小圈
for(int x=0;x<5;x++)
{
     for(int y=x;y<4;y++)
     {
         System.out.print("x");
     }
     System.out.println();
}
现在先考虑等腰三角形的每一行是接续在左侧空格之后的,所以考虑两组for嵌套进行合并
for(int x=0;x<5;x++)
{
         for(int y=x+1;y<5;y++)
         {
                 System.out.print(" ");
         }
         for(int z=0;z<x*2+1;z++)
        {
                 System.out.print("x");
        }
        System.out.println();
}
最后考虑空心的问题,嗯,空心,那么也就是当满足如下条件的时候,等腰三角形的内循环要输出字符“x”,否则输出空格:
1、外循环第一行时与最后一行时
2、内循环的第一个与最后一个时
OK,改造代码:

for(int x=0;x<5;x++)
{
     for(int y=x+1;y<5;y++)
     {
           System.out.print(" ");
     }
     for(int z=0;z<x*2+1;z++)
     {
        //x==0为外循环第一行时,x==4为外循环为最后一行时
        //z==0为内循环第一个字符时,z==x*2为内循环最后一个字符时
        if(x==0||x==4||z==0||z==x*2)
        {
           //这个是全角的x,与上下的两个全角的空格是为了防止英文字体造成变形,因为有些字体的空格与字符并不等宽。
           System.out.print("X");
        }
        else
        {
           System.out.print(" ");
        }
     }
     System.out.println();
}

好的,空心等腰三角形完毕,接下来就是封装成函数,并且将其改造成可以使用传入参数控制即可。

空心的菱形完全可以用上面的套,只是它是倒置的,仅此而已。

作者: 赵顺超    时间: 2014-7-13 13:54
用for嵌套,然后在里面的循环中加上if判断一下,应该是判断两次,满足条件星号,else空字符串
作者: 清净明诲    时间: 2014-7-14 22:08
赵顺超 发表于 2014-7-13 13:54
用for嵌套,然后在里面的循环中加上if判断一下,应该是判断两次,满足条件星号,else空字符串 ...

哦,我思考下,谢谢你了
作者: 毕业生    时间: 2014-7-14 23:11
OCTSJimmy 发表于 2014-7-13 10:18
设有需求要打印一个五行的等腰三角形,如下图所示,其中,“-”代表三角形左侧的空格,“_”代表三角形中的 ...

条理很清楚哦,  以后自己写程序看教程得这样,  这才能学到东西!赞一个!
作者: liwenbin0912    时间: 2014-7-14 23:22
:lol:lol:lol楼上正解
作者: 清净明诲    时间: 2014-7-15 22:12
OCTSJimmy 发表于 2014-7-13 10:18
设有需求要打印一个五行的等腰三角形,如下图所示,其中,“-”代表三角形左侧的空格,“_”代表三角形中的 ...

谢谢哦,非常感谢,写的非常详细,学习了,赞一个
作者: 清净明诲    时间: 2014-7-15 22:13
恩,是啊啊,呵呵,学习了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2