黑马程序员技术交流社区
标题:
求九九乘法表的编程思路秘诀
[打印本页]
作者:
张龙跃
时间:
2013-3-25 17:54
标题:
求九九乘法表的编程思路秘诀
本帖最后由 张龙跃 于 2013-3-25 20:42 编辑
*****
****
***
**
*
*
**
***
****
*****
如上所示的两图,看了视频后我也能编出来,但过段时间就老是忘了 象这样图形我知道要用嵌套循环,但里面的参数却要想很久才能想出来
请问各位i大侠这种图案有什么秘诀可以记吗?
作者:
陈圳
时间:
2013-3-25 17:57
都一样,是因为没有养成先思考,再解题的思维模式,都是做一步,想一步.做熟了,速度就快点.所以要强迫自己先分析问题,再解决.
作者:
徐闯楠
时间:
2013-3-25 18:06
我也是啊
作者:
田磊阳
时间:
2013-3-25 18:16
根据视频上的步骤来,先写问题,再写思路,再写解题步骤,这样慢慢的来,像九九乘法表这样的嵌套循环,多练练就会背过了
作者:
胡志超
时间:
2013-3-25 18:17
先分析行数,也就是外循环,再分析列数,也就是内循环
作者:
柳 德 彬
时间:
2013-3-25 18:23
对于嵌套for来说,你首先要知道那个作为行那个作为列,一步一步的多试,理解这里面的循环规律。
作者:
罗海清
时间:
2013-3-25 18:30
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的初始值,来控制列
*/
作者:
黑马-陈思源
时间:
2013-3-25 18:46
*****
****
***
**
*
用这个举例分析。
不管什么什么代码 都先要有思路 有思路代码不是问题~~~~(老毕教我的~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("");
}
这不就哦了~~~反正 各种功能的实现都要有一个思路。 只要思路到了 没什么记不住的 就算是遇到一个新的问题 你一步一步分析,做出来也是易如反掌的。
加油~
作者:
陆旭东
时间:
2013-3-25 19:54
这种图形打印都是双层循环,你可以选择外层循环负责打印行内层循环负责打印列,也可以外层循环负责打印列内层循环负责打印行,然后你就看行和列的关系写程序。
作者:
HM朱蛟
时间:
2013-3-25 19:59
呵呵 写这种的时候 我脑海里先是浮现的那句话 :
条件上 初始值下
什么意思呢?
因为视频里毕老师说过,一般尖朝上,就改条件,尖朝下,就改初始值。
怎么改?通常是循环嵌套,内循环关联外循环,找他们之间的关系
一般有了这个大方向就不会纠结了
作者:
HM何伟
时间:
2013-3-25 20:19
外圈我们不管,写法都一样,主要是内圈的写法,其实通过仔细分析,好好理解就不难了
尖朝上时,
第一行打印一个*.
第二行打印二个*
第三行打印三个*
第四行打印四个*
通过分打可以知道,行与列递增数值同步变化,因此很容易想到for(y=x;y<arr.length;y++)
尖朝下时:
第一行打印五个*
第二行打印四个*
第三行打印三个*
第四行打印二个*
第五行打印一个*
通过分析我们可以知道:y随着x的增大而减小,因此很容易想到for(x=0;y<arr.length-x;y++)
作者:
罗平
时间:
2013-3-25 20:29
这就是大圈套小圈,当拿到这样的题时不要害怕,你仔细分析它的结构
这个图形有多少行,它的每一行有什么规律。
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();每一行的元素打印完了就换一行,不然会是横着的一排*
}
作者:
疯狂程序
时间:
2013-3-25 20:32
可以看出他是两个循环
首先要看,是尖朝上还是尖朝下
朝上的话
*
**
***
逐渐增长
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
你可以自己好好试试体会一下,不会联系我
作者:
张龙跃
时间:
2013-3-25 20:42
感谢各位的回答了,收货很大。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2