黑马程序员技术交流社区

标题: 打印一个空心的菱形,for循环的运用,希望帮助大家理解for循环 [打印本页]

作者: ytblght55    时间: 2013-6-24 01:03
标题: 打印一个空心的菱形,for循环的运用,希望帮助大家理解for循环
  1. /*
  2. 需求:打印一个空心的菱形
  3. 思路:通过for循环来实现实体菱形的打印,通过if判断语句来挖空菱形
  4. 步骤:
  5. 1,定义2个方法,分别打印菱形的上半部分和下半部分
  6. 2,第一个方法,中通过一个外循环和2个内循环,其中一个内循环完成菱形的挖空动作
  7. 3,同理完成下半部分的菱形的打印e
  8. ----*
  9. ---* *
  10. --* * * 上半部分
  11. -* * * * ------------
  12. --* * * 下半部分
  13. ---* *
  14. ----*

  15. */
  16. class Demo1
  17. {
  18. public static void main(String[] args)
  19. {
  20. //System.out.println("Hello World!");
  21. pb();
  22. db();
  23. }
  24. /*
  25. 打印菱形的上半部分

  26. ----*
  27. ---* *
  28. --* * * 上半部分
  29. -* * * * ------------

  30. */
  31. public static void pb()
  32. {
  33. for(int i=1;i<=4;i++) //外循环主要是控制行数,按照需求上半部分主要有4行组成
  34. {
  35. //控制每行打印的空格数
  36. for(int k=i;k<=4;k++)
  37. {
  38. System.out.print(" ");//每行的空格数按照4 3 2 1 的方式递减,每次i取完值for循环减少一次
  39. }

  40. //每一行打印星号的个数
  41. for(int j=1;j<=i;j++)//每行星星的个数是1 2 3 4 ,每次循环的次数是i的值
  42. {
  43. if(j==1||j==i)//挖空星星,if判断,因为每次我们只要打印边沿的星星就可以挖空
  44. { //当j等于1或者等于最大值i的时候我们才打印星星,其他用空格来表示
  45. System.out.print("* ");//当条件满足的时候我们打印星星
  46. }
  47. else
  48. {
  49. System.out.print(" ");//当不是第一次和最后一次的时候,我们让其输出空格
  50. }
  51. }
  52. System.out.println();//控制换行
  53. }
  54. }
  55. /*
  56. 打印菱形的下半部分
  57. -* * * *
  58. --* * * 下半部分
  59. ---* *
  60. ----*
  61. */
  62. public static void db()
  63. {
  64. for (int x=1;x<=4 ; x++)//外部循环控制函数,需求总共三行
  65. {

  66. //控制每行打印的空格数
  67. for (int y=0;y<x ;y++ )//每行的空格数是成1 2 3 4 的方式递增的,也就是按照外部循环行数x的方式等增的
  68. {
  69. System.out.print(" ");
  70. }
  71. for (int z=x;z<=4 ;z++ )//这个for循环是用来打印星号的输出,按照4 3 2 1 的方式输出.所以z这个初始时在逐步的递增
  72. {
  73. if (z==x||z==4)//判断打印的条件,当打印第一个和最后一个的时候,我们输出*,否则输出空格
  74. {
  75. System.out.print("* ");//输出一个星星
  76. }
  77. else
  78. {
  79. System.out.print(" ");//这边是2个空格,为什么?以为星星被空格替代,所以输出2个空格
  80. }
  81. }

  82. System.out.println();//控制换行
  83. }

  84. }
  85. }
复制代码

作者: 神之梦    时间: 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