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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 周泰良 中级黑马   /  2013-5-11 16:22  /  2468 人查看  /  14 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 周泰良 于 2013-5-12 14:22 编辑

需求:打印
*****
****
***
**
*
老师实现的方法是在在内循环中定义一个新的变量,使得新变量每次自增,达到没列元素个数逐渐减少的目的。
代码如下:
                int z = 5;
                for (int x=0; x<5; x++)
                {
                        for (int y=0;y<z;y++)
                        {
                                System.out.print("*");
                        }
                        System.out.println();
                        z--;
                }
我自己的方式是,没有定义新的变量,而是每次在内循环完了之后,内循环的变量自增,但执行的时候只能打印一行。
代码如下:
class ForForTest
{
        public static void main(String[] args)
        {
                int y = 0;
                for(int x = 0;x < 5;x++)
                {
                        for(;y<5;y++)
                        {
                                System.out.print('*');
                        }
                        y++;
                        System.out.println();
                }
               
        }
}
请教各位,我这个为什么不能实现需求呢?非常感谢!

评分

参与人数 1技术分 +1 收起 理由
殇_心。 + 1

查看全部评分

14 个回复

倒序浏览

更正:老师实现的方法是在在内循环中定义一个新的变量,使得新变量每次自减,达到每列元素个数逐渐减少的目的。
回复 使用道具 举报
老师实现的方法是在在内循环中定义一个新的变量,使得新变量每次自减,达到每列元素个数逐渐减少的目的。

评分

参与人数 1技术分 +1 收起 理由
殇_心。 + 1

查看全部评分

回复 使用道具 举报
for(;y<5;y++)
{
       System.out.print('*');
}
y++;

你这一段代码在第一次外循环执行完后,y的值就变成6了,就已经不会满足y<5这个条件,就不会再进入这个循环了,当然就不会打印*了

评分

参与人数 1技术分 +1 收起 理由
殇_心。 + 1

查看全部评分

回复 使用道具 举报
邹铭钰 发表于 2013-5-11 16:30
for(;y

恩,对,我怎么就没检查出来呢,我误以为执行完内循环后y还是0,所以我自增,呵呵。多谢指出错误,非常感谢!
回复 使用道具 举报
没事的时候可以学习一下  java的调试功能,那样就看的一清二楚了   
具体方法如下


在使用时候是根据用户想要看到那些数据,在一个特定的位置设上断点,鼠标左键双击即可,然后按快捷键F6进行调试,,F5快捷键进入到方法体里面,数据可以在右上方的variables区域可以看到用户想要的数据。
回复 使用道具 举报
截个图   方便学习

调试图.png (368.71 KB, 下载次数: 0)

调试图.png
回复 使用道具 举报
杨修 中级黑马 2013-5-11 22:41:44
8#
你好,无论他是自加还是自减,你看看你的这个这个部分代码吧
for(;y<5;y++)
{
      System.out.print('*');
}
y++;
老师代码里面内循环是自减,这里面就有了两个y++;最后加了两次;
按照你的思路,很显然,外循环内部整个y是会“循环两次”的。
也就是y进行了两次运算。

评分

参与人数 1技术分 +1 收起 理由
刘胜寒 + 1

查看全部评分

回复 使用道具 举报
把“int y = 0;” 这行代码放到第二个for循环里面就可以了;
y 应该是第二个for循环里面的局部变量。
回复 使用道具 举报
        int y = 0;
                for (int x = 0; x < 5; x++)
                {
                        y=x;//这么改搞定,或者在for (y=x; y < 5; y++)效果一样
                        for (; y < 5; y++)//执行完一次内循环y=5了。
                        {
                                System.out.print('*');
                        }
                        //++y;//到这里y=6了。所以就打印一行的星号了。
                        System.out.println();
                }
回复 使用道具 举报
局部变量定义的时候不进行默认的初始化的,亲.  
回复 使用道具 举报
for(;y<5;y++)
{
       System.out.print('*');
}
y++;
你这段代码在第一次运行后,往下就不能被运行了,当然只能打印一行、
回复 使用道具 举报
问题如果以解决,请及时修改分类,否则继续提问问,谢谢合作!
回复 使用道具 举报
刘胜寒 发表于 2013-5-12 10:13
问题如果以解决,请及时修改分类,否则继续提问问,谢谢合作!

好的,多谢版主提醒,辛苦了。
回复 使用道具 举报
周泰良 发表于 2013-5-12 14:02
好的,多谢版主提醒,辛苦了。

份内事情,谈不上辛苦
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马