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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 赵文迪 初级黑马   /  2013-1-19 15:32  /  1161 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 赵文迪 于 2013-1-19 16:35 编辑

for (int i = 0 ; i <= 3; i ++)
        {
                for (int m = 0 ; m <= 3-i ; m ++)
                {
                        System.out.print('*');
                }
               
                System.out.println('*');
        }
为什么编译出来是
*****
****
***
**
不应该是
****
***
**
*
这个吗
这个输出过程究竟是怎样的

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1 吼吼。。。要注重细节呀~~~

查看全部评分

3 个回复

倒序浏览
当i=0时,里面的循环运行了4次没有错,是****,但是当跳出里面的for,外面还要再打个*并且换行,所以,打印结果就成为了*****
当=1时,里面循环了3次,***,外面的循环打印了一个*并换行,结果就是****,
以下类推,就是
*****
****
***
**
*

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 陈丽莉 于 2013-1-19 15:57 编辑

        因为数组的下标是从0开始的,所以要输出四行的话,可以是i从0到<4,当然像你写的,从0到<=3也是一样的。这是控制了输出四行。然后由于你的代码中,换行语句是自带一个*的,也就是说,内层循环控制每行输出的*时,要比预计的少一个,即不要加等号。改后代码如下:
public class Test
{
   public static void main(String[] args)
   {
       for(int i=0;i<=3;i++)
      {
         for(int m=0;m<3-i;m++)      //这里的m<=3去除了等号      
        {
            System.out.print('*');
         }
         System.out.println('*');
      }
   }
}

当然也可以换行的语句不输出*,代码如下:
public class Test
{
   public static void main(String[] args)
   {
      for(int i=0;i<=3;i++)
      {
         for(int m=0;m<=3-i;m++)
         {
            System.out.print('*');
         }
         System.out.println();          //这里改成单纯换行,不输出*
      }
   }
}

    这两种改动的方法都能实现你的想法,希望有助于理解。附运行图:

000.png (5.11 KB, 下载次数: 32)

000.png

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1 赞一个!

查看全部评分

回复 使用道具 举报
谢谢。在线等的,论坛回复的就是快啊。搞明白了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马