黑马程序员技术交流社区
标题:
打印一个空心的菱形,for循环的运用,希望帮助大家理解for循环
[打印本页]
作者:
ytblght55
时间:
2013-6-24 01:03
标题:
打印一个空心的菱形,for循环的运用,希望帮助大家理解for循环
/*
需求:打印一个空心的菱形
思路:通过for循环来实现实体菱形的打印,通过if判断语句来挖空菱形
步骤:
1,定义2个方法,分别打印菱形的上半部分和下半部分
2,第一个方法,中通过一个外循环和2个内循环,其中一个内循环完成菱形的挖空动作
3,同理完成下半部分的菱形的打印e
----*
---* *
--* * * 上半部分
-* * * * ------------
--* * * 下半部分
---* *
----*
*/
class Demo1
{
public static void main(String[] args)
{
//System.out.println("Hello World!");
pb();
db();
}
/*
打印菱形的上半部分
----*
---* *
--* * * 上半部分
-* * * * ------------
*/
public static void pb()
{
for(int i=1;i<=4;i++) //外循环主要是控制行数,按照需求上半部分主要有4行组成
{
//控制每行打印的空格数
for(int k=i;k<=4;k++)
{
System.out.print(" ");//每行的空格数按照4 3 2 1 的方式递减,每次i取完值for循环减少一次
}
//每一行打印星号的个数
for(int j=1;j<=i;j++)//每行星星的个数是1 2 3 4 ,每次循环的次数是i的值
{
if(j==1||j==i)//挖空星星,if判断,因为每次我们只要打印边沿的星星就可以挖空
{ //当j等于1或者等于最大值i的时候我们才打印星星,其他用空格来表示
System.out.print("* ");//当条件满足的时候我们打印星星
}
else
{
System.out.print(" ");//当不是第一次和最后一次的时候,我们让其输出空格
}
}
System.out.println();//控制换行
}
}
/*
打印菱形的下半部分
-* * * *
--* * * 下半部分
---* *
----*
*/
public static void db()
{
for (int x=1;x<=4 ; x++)//外部循环控制函数,需求总共三行
{
//控制每行打印的空格数
for (int y=0;y<x ;y++ )//每行的空格数是成1 2 3 4 的方式递增的,也就是按照外部循环行数x的方式等增的
{
System.out.print(" ");
}
for (int z=x;z<=4 ;z++ )//这个for循环是用来打印星号的输出,按照4 3 2 1 的方式输出.所以z这个初始时在逐步的递增
{
if (z==x||z==4)//判断打印的条件,当打印第一个和最后一个的时候,我们输出*,否则输出空格
{
System.out.print("* ");//输出一个星星
}
else
{
System.out.print(" ");//这边是2个空格,为什么?以为星星被空格替代,所以输出2个空格
}
}
System.out.println();//控制换行
}
}
}
复制代码
作者:
神之梦
时间:
2013-6-24 01:15
咋是实心的?????
作者:
ytblght55
时间:
2013-6-24 01:15
神之梦 发表于 2013-6-24 01:15
咋是实心的?????
图形是实心的,便已大家理解,...
作者:
ytblght55
时间:
2013-6-24 01:17
分析部分,的菱形是实心的,是为了便于大家更直观的理解这个东西,运行的结果是空心的!!!!!!
作者:
张云杰
时间:
2013-6-24 03:56
楼主要不要这样做??!!!! 请参考杨辉三角的定理
*
**
*** 思路是这样的:
楼主可以想象成 这个图形其实是这样的
1
1 1
1 2 1
1 3 3 1
int array[][] = new [4][4];
i 是行, j 是列
现在看下纵坐标的值, 纵坐标下来一排都是1, 然后横坐标的最后一个数 也是1..
也就是说 当纵坐标不变, 横坐标变的时候 这个值为1 , j==0 array[i][j]=1
当纵坐标与横坐标相等的时候, 这个值 也是1 , i==j array[i][j]=1
除了这2种情况等于1以外, 剩下的情况 是不是都在1的内部呢?
由此得出了答案:
数字2, 由上面2个1相加得来. 那么是不是array[i-1][j] (右边的1) + array[i-1][j-1] (左边的1);
array[i-1][j] + array[i-1][j-1] = 空;
这样图形就出来了
减法同上, 由于是当场想出来的, 没有时间贴代码给楼主, 楼主就自己多想想吧
作者:
张云杰
时间:
2013-6-24 03:57
好像是我看错了.. 楼主已经做出来了.. 我错了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2