黑马程序员技术交流社区

标题: 关于For嵌套打印星星的问题 [打印本页]

作者: 周泰良    时间: 2013-5-11 16:22
标题: 关于For嵌套打印星星的问题
本帖最后由 周泰良 于 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();
                }
               
        }
}
请教各位,我这个为什么不能实现需求呢?非常感谢!
作者: 周泰良    时间: 2013-5-11 16:24

更正:老师实现的方法是在在内循环中定义一个新的变量,使得新变量每次自减,达到每列元素个数逐渐减少的目的。
作者: Oyxiaoxi    时间: 2013-5-11 16:27
老师实现的方法是在在内循环中定义一个新的变量,使得新变量每次自减,达到每列元素个数逐渐减少的目的。
作者: 邹铭钰    时间: 2013-5-11 16:30
for(;y<5;y++)
{
       System.out.print('*');
}
y++;

你这一段代码在第一次外循环执行完后,y的值就变成6了,就已经不会满足y<5这个条件,就不会再进入这个循环了,当然就不会打印*了
作者: 周泰良    时间: 2013-5-11 16:52
邹铭钰 发表于 2013-5-11 16:30
for(;y

恩,对,我怎么就没检查出来呢,我误以为执行完内循环后y还是0,所以我自增,呵呵。多谢指出错误,非常感谢!
作者: 赵利斌    时间: 2013-5-11 18:02
没事的时候可以学习一下  java的调试功能,那样就看的一清二楚了   
具体方法如下


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

作者: 赵利斌    时间: 2013-5-11 18:04
截个图   方便学习

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

调试图.png

作者: 杨修    时间: 2013-5-11 22:41
你好,无论他是自加还是自减,你看看你的这个这个部分代码吧
for(;y<5;y++)
{
      System.out.print('*');
}
y++;
老师代码里面内循环是自减,这里面就有了两个y++;最后加了两次;
按照你的思路,很显然,外循环内部整个y是会“循环两次”的。
也就是y进行了两次运算。
作者: 石贤芝    时间: 2013-5-11 23:12
把“int y = 0;” 这行代码放到第二个for循环里面就可以了;
y 应该是第二个for循环里面的局部变量。
作者: 潘廖明    时间: 2013-5-12 00:10
        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();
                }
作者: 、__WSD吴少东    时间: 2013-5-12 01:38
局部变量定义的时候不进行默认的初始化的,亲.  
作者: 王林涛    时间: 2013-5-12 09:23
for(;y<5;y++)
{
       System.out.print('*');
}
y++;
你这段代码在第一次运行后,往下就不能被运行了,当然只能打印一行、
作者: 刘胜寒    时间: 2013-5-12 10:13
问题如果以解决,请及时修改分类,否则继续提问问,谢谢合作!
作者: 周泰良    时间: 2013-5-12 14:02
刘胜寒 发表于 2013-5-12 10:13
问题如果以解决,请及时修改分类,否则继续提问问,谢谢合作!

好的,多谢版主提醒,辛苦了。
作者: 刘胜寒    时间: 2013-5-12 17:59
周泰良 发表于 2013-5-12 14:02
好的,多谢版主提醒,辛苦了。

份内事情,谈不上辛苦




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2