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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© (_演绎、青春 中级黑马   /  2014-5-23 23:33  /  3311 人查看  /  30 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

/*
练习:做如下图形。
----*
---* *
--* * *
-* * * *
* * * * *

思路:
外循环控制行数,5行。int x=0;x<5;x++;
内循环控制列数
用嵌套循环。
*/

class SanJiaoXing
{
        public static void main(String[] args)
        {
                for (int x=0; x<5; x++)
                {
                        for (int y=x+1;y<5; y++)
                        /*int y=x;y<5;y++;的话做出来不贴边如下图:
-----*
----* *
---* * *
--* * * *
-* * * * *

                搞不懂的是为什么y=x+1;就能消掉贴边的那一列呢?我是初学者,就在这转不过弯来,
                                x<5,x控制行,y=x+1,那么最大时是y=4+1=5,然后y<5,然后就迷糊了 (┬_┬)

                        */
                        {
                                System.out.print("-");
                        }
                        for (int z=0;z<=x ;z++ )
                        {
                                System.out.print("* ");
                        }
                        System.out.println();
                }
        }
}

评分

参与人数 1技术分 +1 收起 理由
轻语。 + 1 继续努力

查看全部评分

30 个回复

倒序浏览
额,正在学习中。。。。
回复 使用道具 举报
十年等待VS祥 发表于 2014-5-23 23:37
额,正在学习中。。。。

呵呵,我也刚开始。你看到哪儿了?
回复 使用道具 举报
我给你分析下过程。当外循环中的x=4时,y=x+1; 也就是y=5;因为y<5这时候for循环就会退出,不会打印_了,所以贴边的那列就没有了。
回复 使用道具 举报
我看了有一个礼拜了,才在看到c#基础switch-case语句,看样子你好像比我学的快。。。
回复 使用道具 举报
这些题主要是锻炼逻辑思维能力的   其他的没啥     不要一直纠结一个点   要往后看  这个不影响以后的学习    如果实在段时间弄不明白  还是记住规律吧      
回复 使用道具 举报
java木 发表于 2014-5-23 23:51
我给你分析下过程。当外循环中的x=4时,y=x+1; 也就是y=5;因为y

谢谢哥们儿!
回复 使用道具 举报
寻找人生目标 发表于 2014-5-23 23:59
这些题主要是锻炼逻辑思维能力的   其他的没啥     不要一直纠结一个点   要往后看  这个不影响以后的学习  ...

哦哦,好的 谢谢
回复 使用道具 举报
十年等待VS祥 发表于 2014-5-23 23:58
我看了有一个礼拜了,才在看到c#基础switch-case语句,看样子你好像比我学的快。。。 ...

嗯,快一点点 你一周就学这么快啊 我看了好长时间才看到数组。现在又返回去多看几遍基础
回复 使用道具 举报
:victory: 我会的 呵呵
回复 使用道具 举报


                for(int x=0;x<5;x++)//1. 此循环控制行数
                {
                        for(int y=x+1;y<5;y++)//2. 此循环控制-号数
                        {
                                System.out.print(" ");
                        }
                        for(int z=0;z<=x;z++)//3. 此循环控制*号数量
                        {
                                System.out.print("* ");
                        }
                        System.out.println();
                }
回复 使用道具 举报
本帖最后由 西门吹风 于 2014-5-25 23:54 编辑

x+1 表得第几行,z表示该行要打多少个下画线
x=0,第一行,需要打4个_
x=1,第二行,需要打3个_
x=2,第三行,需要打2个_
x=3,第四行,需要打1个_
x=4,第五行,需要打0个_
可以总结出x与z关系:z=4-x,也就是第x+1行需要打印4-x次下画线,而你把打下画线循环的最大设为 y<5,那么第x+1行的初始值y=5-z=5-(4-x)=x+1,而如果初始值y=x,那么打印的次数z=5-y=5-x,当x=0,就是第一行就打5次下画线,自然是多了一次,其他行也一样

我觉用下面的方法写更好解理:
x 表得第几行,y表示该行要打多少个下画线
x=1,第一行,需要打4个_
x=2,第二行,需要打3个_
x=3,第三行,需要打2个_
x=4,第四行,需要打1个_
x=5,第五行,需要打0个_
可以总结出x与y关系:y=5-x,也就是第x行需要打印5-x次下画线
那么行循环可以这样写 for(int x=1;x<=5;x++)
打下画线的循环就可写成 for(int y=5-x;y>0;y--)

以上是自已的理解,希望对楼主有所帮助







回复 使用道具 举报
楼主我们一起加油

点评

加油加油,呵呵。  发表于 2014-5-26 06:46
回复 使用道具 举报
class ShowTriangle
{
        public static void main(String[] args)
        {
                showTriangle(5);
        }
        public static void showTriangle(int linenum)
        {
                for(int x=0; x<linenum; x++)
                {
                        for(int y=x+1; y<linenum; y++)
                        {
                                System.out.print("-");
                        }
                        for(int z=0; z<=x; z++)
                        {
                                System.out.print("* ");
                        }
                        System.out.println("");
                }

        }
}

分析:
x控制行号,同时,每一行输出的图形个数也是又x控制,假定要输入5行(也就是每行输入的“图形”是五个),当y=x+1(y<行数),
就保证了没行输出的“-”正好比所在行数少一个,假定输出到了最后一行(此时行号为四),所以输出的“-”为0,
这就保证了控制台输出的图形正好贴边,没有多出的第一个“-”。
其实很简单,找张纸,自己代入一个数字,在纸上按程序流程画一遍就ok了!

回复 使用道具 举报
yinxjfly 发表于 2014-5-26 01:04
class ShowTriangle
{
        public static void main(String[] args)

嗯,好的,谢谢。
回复 使用道具 举报
西门吹风 发表于 2014-5-25 23:45
x+1 表得第几行,z表示该行要打多少个下画线
x=0,第一行,需要打4个_
x=1,第二行,需要打3个_

谢谢:handshake
回复 使用道具 举报
(_演绎、青春 发表于 2014-5-24 00:55
嗯,快一点点 你一周就学这么快啊 我看了好长时间才看到数组。现在又返回去多看几遍基础 ...

楼主。。我看了8天,学习到了面向对象里的this的应用了。。。。
我是零基础的:),你学了多久了啊??要加油啊
回复 使用道具 举报
EDDY_Liang 发表于 2014-5-26 09:48
楼主。。我看了8天,学习到了面向对象里的this的应用了。。。。
我是零基础的,你学了多久了啊??要加 ...

亲,你好厉害 我学了2个多星期了,才到数组那儿...  总是走着走着前面的就有点没印象了。然后折回去在看看。有啥好的方法啊,请教一下。你QQ多少 我加你好友
回复 使用道具 举报
(_演绎、青春 发表于 2014-5-26 10:11
亲,你好厉害 我学了2个多星期了,才到数组那儿...  总是走着走着前面的就有点没印象了。然后折回去在看 ...

382306167
你可以加我,我们以后有学习上的问题可以交流一下
回复 使用道具 举报
EDDY_Liang 发表于 2014-5-26 11:00
382306167
你可以加我,我们以后有学习上的问题可以交流一下

好的,我加你好友了。
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马