A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张龙跃 中级黑马   /  2013-3-25 17:54  /  3662 人查看  /  13 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 张龙跃 于 2013-3-25 20:42 编辑

*****
****
***
**
*


*
**
***
****
*****

如上所示的两图,看了视频后我也能编出来,但过段时间就老是忘了 象这样图形我知道要用嵌套循环,但里面的参数却要想很久才能想出来

请问各位i大侠这种图案有什么秘诀可以记吗?

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

13 个回复

倒序浏览
都一样,是因为没有养成先思考,再解题的思维模式,都是做一步,想一步.做熟了,速度就快点.所以要强迫自己先分析问题,再解决.

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
我也是啊
回复 使用道具 举报
根据视频上的步骤来,先写问题,再写思路,再写解题步骤,这样慢慢的来,像九九乘法表这样的嵌套循环,多练练就会背过了
回复 使用道具 举报
先分析行数,也就是外循环,再分析列数,也就是内循环

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
对于嵌套for来说,你首先要知道那个作为行那个作为列,一步一步的多试,理解这里面的循环规律。
回复 使用道具 举报
class Demo
{
        public static void main(String[] args)
        {
                for(int x=0; x<5; x++)
                {
                        for(int y=0; y<=x; y++)//内循环,控制列
                        {
                                System.out.print("*");
                        }
                        System.out.println();
                }

                for(int x=0; x<5; x++)//外循环,控制行
                {
                        for(int y=x; y<5; y++)//想要控制列是逐渐变化的,就要控制y的初始化的值,或者控制y满足条件时的极限值。
                        {
                                System.out.print("*");
                        }
                        System.out.println();
                }
        }
}
/*

*
**
***
****
*****

*****
****
***
**
*
分析:行,是固定的5行
                列,是逐渐变多的列。

                1、因为外循环是决定了有几行,本例中的x就是代表了第几行的行号。
                2、既然x会慢慢变大,而列也是逐渐变多!所以x和y两个有关系。
                3、已知道x是从0到4变大的了,那么y就有两个方法,使得y的变化趋势和x一样。
                4、第一种:y每次循环从0开始,通过控制y小于多少,来控制列。
                        第二种:y每次都小于一个固定值,然后通过控制y的初始值,来控制列










*/
回复 使用道具 举报
*****
****
***
**
*

用这个举例分析。
不管什么什么代码  都先要有思路  有思路代码不是问题~~~~(老毕教我的~0.0)
首先,看到这个图形,第一时间就知道打印出来需要for嵌套来实现。
好的,我们就可以先写出个大概
for(;;)
{
      for(;;)
}
然后这个图形 有5行  &   
for(int x=0;x<5;x++)
{
      for(;;)
}
然后  第一行有5列   第二行有4列  第三行有3列。。列数就是自减  就可以写出~~
for(int x=0;x<5;x++)
{
      for(int y=5;y>x;y--)
      {
            System.out.print("*");
      }
}
然后 打印出来  发现 都在一行  所以
for(int x=0;x<5;x++)
{
      for(int y=5;y>x;y--)
      {
            System.out.print("*");
      }
        System.out.println("");
}


这不就哦了~~~反正 各种功能的实现都要有一个思路。  只要思路到了  没什么记不住的  就算是遇到一个新的问题   你一步一步分析,做出来也是易如反掌的。
加油~





回复 使用道具 举报
这种图形打印都是双层循环,你可以选择外层循环负责打印行内层循环负责打印列,也可以外层循环负责打印列内层循环负责打印行,然后你就看行和列的关系写程序。
回复 使用道具 举报
呵呵 写这种的时候 我脑海里先是浮现的那句话 :  
条件上 初始值下
什么意思呢?
因为视频里毕老师说过,一般尖朝上,就改条件,尖朝下,就改初始值。
怎么改?通常是循环嵌套,内循环关联外循环,找他们之间的关系
一般有了这个大方向就不会纠结了
回复 使用道具 举报
外圈我们不管,写法都一样,主要是内圈的写法,其实通过仔细分析,好好理解就不难了
尖朝上时,
第一行打印一个*.
第二行打印二个*
第三行打印三个*
第四行打印四个*
通过分打可以知道,行与列递增数值同步变化,因此很容易想到for(y=x;y<arr.length;y++)
尖朝下时:
第一行打印五个*
第二行打印四个*
第三行打印三个*
第四行打印二个*
第五行打印一个*
通过分析我们可以知道:y随着x的增大而减小,因此很容易想到for(x=0;y<arr.length-x;y++)
回复 使用道具 举报
这就是大圈套小圈,当拿到这样的题时不要害怕,你仔细分析它的结构
这个图形有多少行,它的每一行有什么规律。
for(int x=1;x<=5;x++)//这里就是控制行的
{
  for(int y=x ; y<=5;y++)//这里控制的是列 第一次循环x=1; y:1->5   相差五个吧  第二次循环:x=2;y:2->5 相差四个吧,。。
  {
   System.out.print("*");
  }
System.out.println();每一行的元素打印完了就换一行,不然会是横着的一排*
}
回复 使用道具 举报
可以看出他是两个循环
首先要看,是尖朝上还是尖朝下
朝上的话
*
**
***
逐渐增长
for(x = 0;x<9;x++){
        for(y = 0;y<x;y++){
        }
}
内循环y<x是关键
对于尖朝下
for(x = 0;x<9;x++){
        for(y = x;y<9;y++){
        }
}
内循环关键要看y = x
你可以自己好好试试体会一下,不会联系我
回复 使用道具 举报
感谢各位的回答了,收货很大。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马