黑马程序员技术交流社区

标题: for循环的输出语句问题 [打印本页]

作者: {黑马}    时间: 2015-8-9 21:51
标题: for循环的输出语句问题
for (int i = 0; i < 6; i++)
                                {
                                for (int j = 1; j <= 5; j++)
                                {
                                if (i == 0 || i == 5||j==1||j==5)
                                {
                                System.out.print("*");
                                }
                                else
                                {
                                System.out.print(" ");
                                }
                                }
                                System.out.println();
            }

打印出  *****
            *     *
            *     *
            *     *
            *     *
            *****
不知道第一行是怎么打印出来的?求大神解释!
作者: godboy001    时间: 2015-8-10 08:43
i==0的时候,不管j==啥?都要打印*啊,从j==1打印到j==5;因为满足其中一个条件就可以啦,i==5的时候也是
作者: 一叶泛舟    时间: 2015-8-10 11:48
第一行不就是i==0的时候的打出来的吗
作者: {黑马}    时间: 2015-8-10 21:18
godboy001 发表于 2015-8-10 08:43
i==0的时候,不管j==啥?都要打印*啊,从j==1打印到j==5;因为满足其中一个条件就可以啦,i==5的时候也是 ...

没弄明白
作者: {黑马}    时间: 2015-8-10 21:22
一叶泛舟 发表于 2015-8-10 11:48
第一行不就是i==0的时候的打出来的吗

不会啊!不知道怎么出来的,条件是什么?能说的具体点不
作者: 高山高水高小波    时间: 2015-8-10 21:23
for嵌套循环啊
作者: godboy001    时间: 2015-8-10 21:30
i==0||i==5||j==1||j==5//第一个条件
意思是第一行或者第六行或者第一列或者第五列
System.out.println("*");//打印*
其余的时候
System.out.println("");//打印空格
第一行i==0时候第一个条件满足,打印*,i==0时候进入内循环j==1,2,3,4,5分别打印5个*,i++
此时i==1,j==1打印*,j==2第一个条件不满足,打印空格,j==3,==4,也是打印空格,j==5第一个条件满足,打印*
下面同理......
作者: Marx_D    时间: 2015-8-10 21:52
class Rect {
        public static void main(String[] args) {
                printX(5);
                for (int x = 0; x < 4; x++) {
                        for (int y = 0; y < 1; y++) {
                                System.out.print("*   *");
                        }
                        System.out.println();
                }
                printX(5);
               
        }
        public static void printX(int x) {
                for (int a = 0; a < x; a++) {
                        System.out.print("*");
                }
                System.out.println();
        }
}

未命名图片.png (1.35 KB, 下载次数: 21)

未命名图片.png

作者: Marx_D    时间: 2015-8-10 21:57
public static void main(String[] args) {
               
                for (int i = 1; i <= 6; i++) {
                        if (i == 1 || i == 6) {
                                System.out.println("*****");
                        } else {
                                System.out.println("*   *");
                        }
                }
}
作者: mmppp    时间: 2015-8-10 23:33
帅哥没明白白第一行怎么输出来的吗?第一行的判断条件是if(i==0)||
这个||就是一个短路与的意思,满足第一个直接就是true,然后就执行下面的语句
而你看,这个第一次循环的时候,i=0啊 所以每次都是在if(i==0)的时候直接就print(*)了啊
懂了吗
作者: 地狱里的帅灵魂    时间: 2015-8-11 00:18
首先,哥们的格式有问题,层次不清晰,代码少还好分析,如果代码多了分析都分析不出来。要养成一种好习惯。如果不清楚你可以按着EditPlus默认格式来。
像这样
class  Noname1{
        public static void main(String[] args) {
                for (int i = 0; i < 6; i++){
                        for (int j = 1; j <= 5; j++){
                                if (i == 0 || i == 5||j==1||j==5){
                                        System.out.print("*");
                                } else {            
                                        System.out.print(" ");            
                               }               
                       }
                               System.out.println();
                  }
           }
}
正规的格式有助于解读代码,这样我们来分析第一行
首先是这是一个for循环嵌套,for循环嵌套的规律是“外循环”循环1次“内循环”循环6次(“6次”由j决定),
内循环要进行判断(i == 0 || i == 5||j==1||j==5),很显然,i=0时通过了内循环里面的if判断条(i是外循环的参数,内循环没有循环完第一遍循环前是不变的---------->>for循环嵌套的规律是“外循环”循环1次“内循环”循环6次(“6次”由j决定))
所以要运行6次System.out.print("*");  
这样第一行就会打印出来了。
还有必须要了解双或的定义
”||双或“:当符号(||)左边判断为真,符号右边程序将不再编译
祝你好运


作者: 晚上没饭吃    时间: 2015-8-11 00:26

for (int i = 0; i < 6; i++)
                                {
                                for (int j = 1; j <= 5; j++)就是说i==0的时候第二个循环打印的5次
作者: byr216    时间: 2015-8-11 15:14
      帅哥,首先,你先弄明白 if (i == 0 || i == 5||j==1||j==5)这个条件的意思,这个条件成立的情况是只要i==0、i==5、j==1,j==5这四种情况有一种成立就会进入System.out.print("*");
      所以在i==0时候,for (int j = 1; j <= 5; j++)这个循环进行了五次,五次都满足if的条件,所以打印了5个*
作者: 平爷    时间: 2015-8-11 21:07
for(int x = 1 ; x<=6 ; x++){
                        if(x>=2&&x<=5){
                                System.out.println("*   *");
                        }
                        else{
                                System.out.println("*****");
                        }
                  }
作者: {黑马}    时间: 2015-8-13 21:39
地狱里的帅灵魂 发表于 2015-8-11 00:18
首先,哥们的格式有问题,层次不清晰,代码少还好分析,如果代码多了分析都分析不出来。要养成一种好习惯。 ...

谢谢!明白了
作者: 秋天中の夏季    时间: 2015-8-13 22:43
同二楼观点
作者: 蓬头小道士    时间: 2015-8-13 23:04
程序第一次执行,i值为零,条件成立,所以打印5个*
作者: {黑马}    时间: 2015-8-13 23:19
晚上没饭吃 发表于 2015-8-11 00:26
for (int i = 0; i < 6; i++)
                                {
                                for ( ...

谢谢,明白了
作者: {黑马}    时间: 2015-8-13 23:20
地狱里的帅灵魂 发表于 2015-8-11 00:18
首先,哥们的格式有问题,层次不清晰,代码少还好分析,如果代码多了分析都分析不出来。要养成一种好习惯。 ...

非常感谢
作者: kingxiao    时间: 2015-8-13 23:25
不管怎么要第一次i= 0 都满足吧 是吧 救你输出5次了
作者: ake    时间: 2015-8-14 03:03
本帖最后由 ake 于 2015-8-14 03:06 编辑

for (int j = 1; j <= 5; j++)                     
{                                                               if (i == 0 || i == 5||j==1||j==5)  //开始外循环 i = 0 ,内循环第一个条件 i == 0满足 ,故内循环五次打印五个*            
                                    {
                                            System.out.print("*");           
                                     }


作者: F灬灬    时间: 2015-8-15 14:46
for (int j = 1; j <= 5; j++)
                                {
                                if (i == 0 || i == 5||j==1||j==5)
                                {
                                System.out.print("*");
                                }
                                else
                                {
                                System.out.print(" ");
j控制行数,i控制列数,把里层循环执行完后才会执行外层循环
作者: deng2242    时间: 2015-8-15 22:26
首先你这代码写的没有层次感,不易于阅读.从代码中看当i==0时,满足外循环同时满足内循环,而i在内循环中是不变化的,所以第一行输出*个数等于内循环执行的次数,就是5




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