黑马程序员技术交流社区

标题: 问个题 [打印本页]

作者:  『无』尘    时间: 2013-12-22 12:19
标题: 问个题
本帖最后由  『无』尘 于 2013-12-23 15:04 编辑

下列代码运行的结果是( )
public static void main(String[] args) {
        
        int x = 4;
        int y = 5;
        if(x++>4 & ++y>5) {
                x++;
        }
        System.out.println("x=" + x + ",y=" + y);
        
}
A. x=4,y=5
B. x=4,y=6
C. x=5,y=6
D. x=6,y=6


if(x++>4 & ++y>5) {
                x++;
        }  这个if吗、里面的东西是如何运作的,x++>4在本题里是如何运作,++y>5是如何运作,还有大括号里的x++又是如何运作,有些迷糊了
作者: 卖火柴    时间: 2013-12-22 12:39
本帖最后由 卖火柴 于 2013-12-22 12:41 编辑

if(x++>4 & ++y>5) 这个条件是不成立的,所以不会执行后面的x++。后加加的意思是先比较 后++的。4>4.明显是不对的.请区别清楚前++后++的区别你就明白了的. 应该选择x=5,y=6..
作者: 程玉习    时间: 2013-12-22 12:50
结果是C;
因为x++先赋值再自增,所以x++值是4,但是赋值后的x的值是5,所以条件不满足,但是运算符是&,&后的++y还会执行到,if的执行语句x++;不会执行,所以x=5,y=6;

语言组织不好,望多交流
作者: Diaraelo    时间: 2013-12-22 13:05
本帖最后由 Diaraelo 于 2013-12-22 13:12 编辑

选C
     问题其实主要考的是++位置导致的作用,和 && 与 & 的区别,如果++在前面就需要先加一再进入后面的运算,如果++在后面就需要运算后再进行加一。
    你题目x=4开始进入if语句,然后4>4是返回false,然后++在后面x进行了加一运算。x=5
    然后关键到了,&并非是&&,他们的区别马上就体现出了,因为你以后可能还会遇到&&符号所以给你讲一下,因为是&符号出现,输入已经得到了false的返回,但是还是会继续++y>5的判断。所以y=6,最后因为返回false执行了else(就是什么都不做,不进行后面的x++运算)输出了C答案的结果。
    但是注意如果是&&符号++y是不会执行的,也就应该返回5 5的结果,这点给你说下 && 和 || 的作用,他们其实是一个节省不必要运算的功能,比如A && B 中一个为假,结果都为假,如果A判断为假,B的真假就不需要再判断了就不会对B进行运算了。||也是差不多的,就是一个为真结果就是真,不需要判断后出现的数了。如果只用单个符号时候即便已经知道最后答案他还是会继续运算后面的结果。

作者: 恩恩    时间: 2013-12-22 13:16
题目的结果肯定是x=5, y = 6 。 估计你不明白的原因是他是怎么运作的。
首先来讲一下x++ 和 ++x的区别, 当你使用X++的时候当前的X并没有加1,而是在后面的调用中X加1了,什么意思,来给你举个例子。
int x = 1 ;
x++ ;  //  这里的X还是1,看后面的语句;
System.out.println(x);//这里在调用X,在前面的句子中已经被加1了,这个的意思就是当前的X要被用过才会加1。
再来看下面的例子
int y =1 ;
++y ;      //这里的y已经是2了,为什么呢,这个++的意思是在你用这个变量值钱就已经被加过了,所以是这样的。
System.out.println(y) ;


如果还不明白,我可以建议笔者使用debug模式,在eclipse下面调试,然后可以看到里面的各个变量的值在什么时候是多少,这样就会一目了然。很有帮助。

作者: 青菜白汤    时间: 2013-12-22 14:33
答案是C。
x会先赋值然后再比较,然后 x++ 在自增,自增之后的 x 值为5,此时第一个条件为false;
  而  ++y  测是反过来,先自增, 值就为6,然后在赋值于 y,此时条件为true; 最后 & 运算符相当于 and ,综合条件条件为false,所以大括号下面的x++不会执行到,最终输出x=5,y=6;
希望能帮到你!
作者:  『无』尘    时间: 2013-12-23 07:14
恩恩 发表于 2013-12-22 13:16
题目的结果肯定是x=5, y = 6 。 估计你不明白的原因是他是怎么运作的。
首先来讲一下x++ 和 ++x的区别, 当 ...

if条件小括号里的自增能传递到if语句之外么,不是判定条件不符就不传递了么?
作者: 刘旭升    时间: 2013-12-23 08:04
 『无』尘 发表于 2013-12-23 07:14
if条件小括号里的自增能传递到if语句之外么,不是判定条件不符就不传递了么? ...

程序中的 x,y 都是全局变量。不是 if( int i =0 ; ;){   } 中的 i 这种类型仅在 if 中有效,出了if体就消失了。因为这个函数中的所有 x 或 y ,在内存里都是同一个指向,所以一旦修改就真的修改了。有一种情况是两个地址的,那一种应该就是你所纠结的地方:变量情况就是 局部和全局 声明的一对{}之间有效。
作者: 恩恩    时间: 2013-12-23 10:16
 『无』尘 发表于 2013-12-23 07:14
if条件小括号里的自增能传递到if语句之外么,不是判定条件不符就不传递了么? ...

但是这里你的X是在外面定义的,所以当你对X执行的所有做操都会把X改变的,虽然条件不成了,但是你还是执行了X++这个操作呀,懂了吗
作者:  『无』尘    时间: 2013-12-23 15:01
恩恩 发表于 2013-12-23 10:16
但是这里你的X是在外面定义的,所以当你对X执行的所有做操都会把X改变的,虽然条件不成了,但是你还是执 ...

懂了,谢谢




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