黑马程序员技术交流社区

标题: 关于for的嵌套循环的问题! [打印本页]

作者: 申锟    时间: 2013-10-28 17:10
标题: 关于for的嵌套循环的问题!
本帖最后由 申锟 于 2013-10-29 13:05 编辑
  1. <p>//用嵌套循环打印以下形状!
  2. /*

  3. *****
  4. ****
  5. ***
  6. **
  7. *

  8. */

  9. class  fordemo
  10. {
  11.         public static void main(String[] args)
  12.         {        
  13.                 int z = 5;
  14.                 for (int x=0; x<5; x++)
  15.                 {
  16.                         for (int y=0; y<z; y++)
  17.                         {
  18.                                 System.out.print("*");
  19.                         }
  20.                         System.out.println("*");
  21.                         z--;
  22.                 }
  23.         }
  24. }
  25. 为什么我的显示不对呢?</p><p>如下图所示:</p><p> </p><p> </p>
复制代码

TM截图20131028171014.png (3.15 KB, 下载次数: 3)

TM截图20131028171014.png

作者: 黄炳期    时间: 2013-10-28 17:19
你每行都多打印了一个,每行减掉一个*就可以了


作者: 申锟    时间: 2013-10-28 17:31
黄炳期 发表于 2013-10-28 17:19
你每行都多打印了一个,每行减掉一个*就可以了

多谢!

图片好模糊啊,咋的看不清呢,能不能复制我做错的那一行代码回复一下?

老是感觉不科学啊......


作者: 申锟    时间: 2013-10-28 17:33
黄炳期 发表于 2013-10-28 17:19
你每行都多打印了一个,每行减掉一个*就可以了

:lol另外,新人厚脸皮的求加分,第一次回答问题  http://bbs.itheima.com/forum.php ... 4262&pid=527802  
作者: wenbaoxing    时间: 2013-10-28 18:25
请看一下代码,我只改了一处:
  1. class  ForDemo
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 int z = 5;
  6.                 for (int x=0; x<5; x++)
  7.                 {
  8.                                 for (int y=0; y<z; y++)
  9.                                 {
  10.                                                 System.out.print("*");
  11.                                 }
  12.        
  13.                                 //这句话是打印一个换行,改成这样就行了
  14.                                 System.out.println();
  15.                                 z--;
  16.                 }
  17.         }
  18. }
复制代码

作者: 1961993790    时间: 2013-10-28 18:37
正确代码如下:
class  fordemo
{
        public static void main(String[] args)
        {        
                int z = 5;
                for (int x=0; x<5; x++){
                        for (int y=0; y<z-x; y++){
                                System.out.print("*");
                    }
                    System.out.println();                        
                }
        }
}
首先解释一下,x代表的是行数,y代表的是列数,根据图形可以总结以下规律
一共打印了有5行所以x初始值定义为5,再看列第一行是5个*,第二行有4个*
以此类推下去总结到y=x-i;可以保证得到这个打印效果,但是为什么在第一个for循环,
为什么还要有这个语句呢?System.out.println();  是因为打印完要换行。
希望能帮助你,如果还不懂就qq聊。{:soso_e100:}
作者: 申锟    时间: 2013-10-28 18:39
本帖最后由 申锟 于 2013-10-28 18:44 编辑
wenbaoxing 发表于 2013-10-28 18:25
请看一下代码,我只改了一处:

这么弄应该是对了,我用你的代码运行还是原来的结果....不知道什么情况
作者: wenbaoxing    时间: 2013-10-28 18:49
申锟 发表于 2013-10-28 18:39
这么弄应该是对了,我用你的代码运行还是原来的结果....不知道什么情况

不可能,我运行成功了,结果正确,
我想你一定是文件名混乱了,运行的字节码文件不是我的这个java文件编译出来的,
你把你的所有的.class文件都删了,重新编译我这个,再试试

作者: 回天之力    时间: 2013-10-28 19:19
class  ForDemo
{
        public static void main(String[] args)
        {
              //  int z = 5; 其实不用定义z  直接利用x就行
                for (int x=0; x<5; x++)
                {
                                for (int y=x; y<5; y++)
                                {
                                                System.out.print("*");
                                }   
                                System.out.println("over");                }
        }
}就这样就可以了


作者: 那得好好想想    时间: 2013-10-29 09:53
根据你的代码,只需要把for (int y=0; y<z; y++) 这一行中的 y<z,换成y<z-1 即可。因为你在第23行多打了一个*,是在第一层循环与第二层中间打的,多打了一个,所以在第二层循环中要少打一个,那么就是y<z-1




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