黑马程序员技术交流社区

标题: 哪位大神可以帮忙理解下这两个小程序??? [打印本页]

作者: maxiao124    时间: 2016-4-20 08:52
标题: 哪位大神可以帮忙理解下这两个小程序???
就是下面这两个,谢谢喽

QQ图片20160416154735.png (27.38 KB, 下载次数: 2)

QQ图片20160416154735.png

QQ图片20160420084140.png (96.1 KB, 下载次数: 3)

QQ图片20160420084140.png

作者: maxiao124    时间: 2016-4-20 08:59
第一个程序 : 既然已经break b 了,为什么还会输出j = 1 ,既然会输出是因为走到了System.out.println("j = " + j),所以可以理解成 b 还在继续执行吗?只是又一次到了break b ,后面的不执行了,但 j = 1 这第一步一直在执行?

第二个程序 : 哪位大神可以帮忙理解下不,是因为x++ 先判断,所以判断if语句不满足条件,但是由于已经执行了这个动作,所以肯定最终++了,导致结果是x = 2吗?
作者: 陈文广    时间: 2016-4-20 09:20
第一题你定义的跳出循环标记是b 也就是跳出的内循环 那么外循环还是会执行10次的 并且外循环会每次将i+1后输出.
内循环因为你在循环体内有跳出内循环的标记 那么每次只执行一次就跳出了内循环 也就是内循环结束了. 这个时候又开始外循环  进来i+1后 输出 i 后 再进内循环 又将j重新赋值为1了 所有j每次都是输出的 值为1


第二题要理解两个运算符的 计算  ++ 和&运算符的计算规则  ++运算符在前 ,那么表达式 ++X 这里X代表变量
表达式++X的值是 x的值+1后的值 ,++运算符在后  表达式X++ 的值 就是 x的值  但是++X和X++在表达式的值计算完毕后 变量X的值都变成了 X的原值+1  &运算符 作为双目运算符时, 它两边的表达式都要参与运算 并且只有当两边的表达式的值都为true 时 整个由&运算符连接的boolean表达式的值才为true .
作者: maxiao124    时间: 2016-4-20 09:26
明白意思了,thanks
作者: 编号89757    时间: 2016-4-20 10:26
楼上两位,打这么多字,佩服
作者: okchenyang44    时间: 2016-4-20 16:12
woyebuhui77091184
作者: lidandan    时间: 2016-4-20 16:46
第一个问题:
先执行a,i=1,然后执行b,当j=1的时候,输出j=1,然后遇到break ,然后直接跳出b循环,然后去执行i++,然后又输出i,接着又去执行b,在输出j=1,遇到break,再跳出,所以一直都是i在自增,j一直不变


第二题:
判断(x++ ==2 & ++y == 2)是假,所以就不执行x=7,然后就输出x = 2,y = 2

作者: 水月灬清影    时间: 2016-4-21 10:59
本帖最后由 水月灬清影 于 2016-4-21 11:08 编辑

楼上两位解释的蛮到位了,我再多说两句:
第一个问题,for循环内是顺序结构啊,必然先执行输出,然后执行break跳出循环,只不过每次内循环只执行一次就跳出内循环,j 没有自加,所以一直输出1,相对的,外循环执行了10次,所以 i 在变化。另外循环标号a,b  然后break b;这种方式我倒是第一次见…寡闻了……break默认跳出该层循环,所以是不是可以略去标号?
第二个问题,我再说下程序执行流程:进入if循环,由于是单&,所以同时执行两个逻辑判断:x==2(此时x==1,所以假)和++y==2(y先自加1,变成2,所以真).由于x==2假,false&true,false,所以if语句(x=7)不执行,然后x执行++,变成2,最后输出x,y 推荐看看基础的自学视频吧,这两个题是逻辑运算符和for循环部分


作者: huhemingtiancai    时间: 2016-4-21 14:43
加油呀,基础学好后面才好做
作者: 菊花爆满山    时间: 2016-4-21 14:56
第一题:遇到break跳出内循环 但是break你定义到了内循环最后一句 所以加不加都一样
第二题:if条件不满足 所以不执行for里面的代码 由于x++ 所以x=2 ,++y  所以y=2
作者: fanlelong    时间: 2016-4-21 18:08
兄弟 学的还多呢 这些都是小问题
作者: 风语风雨    时间: 2016-4-21 21:32
这个老师上课讲了吧
作者: 董改名    时间: 2016-4-21 21:44
明白了,,
作者: 淡然无味    时间: 2016-4-21 22:33
第一个很简单,break b表示的是跳出前面有 b:的这个for循环,所以每次这个循环都需要重新开始,j的值永远都是为1;第二个x++会先赋值后自增,1!=2 所以前面的为false,执行这个语句后x的值为2了, 后面的++y是先自增后赋值,执行后y=2 后面的为true,但是&只有都为true才为true,所以x=7不会执行,输出的是两个2
作者: 小红花    时间: 2016-4-22 10:23
第一道题楼上已有正解,这里就不说了,其实第二道题首先判断是个假命题,完事还是涉及到:i++是先运行,后加;++y是先加在运行。要理解运行后计算机才可以保存结果。
作者: huaihkiss    时间: 2016-4-22 11:46
第一个i 正常运行  j经过break跳出循环  所以每次都是到1就跳出来了
作者: huaihkiss    时间: 2016-4-22 11:49
第二个程序  由于本语句中有个x后自加 因为后自加是返回这个变量再加上1  返回的过程中不满足等于2的条件  因为&是两个条件满足才会执行下边的语句  所以不执行




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