问答详情
源自:4-10 编程练习

关于for循环

http://img.mukewang.com/57faa7670001cbf813020597.jpg

如图所示,,为什么我第16行屏蔽会得到正确答案,而不屏蔽就会循环出这么多不需要的答案啊?

提问者:破晓之空 2016-10-10 04:26

个回答

  • 慕粉3951534
    2016-10-10 11:24:09
    已采纳

    这个问题可能当面讲很好理解,通过打字有点难说清,我试着说说

    首先明确,你的代码中嵌套了三个 for 循环,

    for(var i=0;i<infos.length;i++) //我们设为 A
    for(var j=0;j<infos[i].length;j++) //我们设为 B
    for(var k=0;k<infos[i].length;k++) //我们设为 C

    其实可以看到,你的 B 和 C 两个循环是一样的,有冗余,这里先不讨论,先解释为什么出现你说的现象。

    你的 B 循环内,C 循环之前有两句代码,

    if(infos[i][j]=="大一")
    document.write(infos[i]+"<br/>");

    document 这一句就是你的第 16 行,我们简称 16,16 未屏蔽时,是属于 if 语句体的,而后面的 C 循环则是独立于 if 语句,不受 if 的影响,所以每当 B 循环一次,C 都要完整的循环 4 次,这 4 次 C 的循环会打印一个 小A,(这里我们先拿 小A 举例,其他的类推),而 B 一共会循环 4 次,所以 C 就会打印出 4 个 小A,在第 4 次打印 小A 之前,if 语句条件满足,会走 16,所以先打印一次数组。


    当 16 屏蔽,由于 if 未加大括号 {},会默认将紧随其后的一句代码归入 if 语句体,这里的 C 循环是一个整体,紧随 if 之后,所以被归入 if 语句体,那么也就是说,只有当 if 语句条件满足时,C 循环才会发生。而在 B 循环的 4 次循环中,if 语句只会满足一次,就是 “大一” 那次,这时 C 发生 4 次循环,打印一个 小A,然后 B 循环结束,A 循环进入下一次循环。所以最后你得出的结果是正确的。


    你的代码没必要这样写,在课程下面的 “同学代码”中,有很多同学的代码,都写得不错,你可以看看,参照一下。

  • getElementsByHeart
    2016-10-10 09:17:57

    for(var i=0;1<infos.length;i++){

        if(infos[i][3]="大一"){

                if(infos[i][1]="女生'"){

                          document.write("infos[i][0]")  ;

            }

        }

    }

  • 0_0不懂
    2016-10-10 09:07:50

        for(var j=0;j<infos[i].length;j++){
                if(infos[i][j]=="大一")
                document.write(infos[i]+"<br/>");

    这里的代码是判断一行中所有符合你的条件“大一”的一个循环,你设置你每循环一次就打印一次

  • Vkon_Sun
    2016-10-10 08:58:59

    因为你是在循环里面输出数组信息啊,除了16行还有20行。其实不需要那么麻烦的,用一个循环和一个判断语句就可以完成这个练习了。