黑马程序员技术交流社区

标题: 求解释一下,小问题 [打印本页]

作者: 也许_还不懂    时间: 2014-11-12 20:10
标题: 求解释一下,小问题
若x=2,则表达式(x++)/3的值是?  
我用Java运行了一下结果是0
代码是class Demo {        public static void main(String[] args) {
                int x = 2;
                x++;  {
                        System.out.println(x);
                }
        }
}

  我认为结果不应该是1么,x++  X不就应该等于3了么  3/3=1啊


作者: 李春江    时间: 2014-11-12 20:21
应该X++是先使用X的值,然后再自加一下。所以应该为0(2/3)+1=1;
作者: 也许_还不懂    时间: 2014-11-12 20:26
李春江 发表于 2014-11-12 20:21
应该X++是先使用X的值,然后再自加一下。所以应该为0(2/3)+1=1;

输出我打错了  重新发一遍
作者: 也许_还不懂    时间: 2014-11-12 20:27
若x=2,则表达式(x++)/3的值是?  
我用Java运行了一下结果是0
代码是class Demo {        public static void main(String[] args) {
                int x = 2;
                x++;  {
                        System.out.println((x++)/3);
                }
        }
}

输出的结果是0    为什么啊

作者: 柳超    时间: 2014-11-12 20:47
我觉得应该这么理解!
i++ 的做用是 把 i参与的表达式用i 的原始值进行运算后  进行 i + 1
也就是説 你的算法可以这么写
int i = 2;
2/3 = 0
i=i+1;
作者: 柳超    时间: 2014-11-12 20:48
class Demo {
        public static void main(String[] args) {
                 int x = 2;
                 x++;
                {
                         System.out.println((x++)/3);
                 }
         }
}
这个运算  你确定结果是0?
作者: 也许_还不懂    时间: 2014-11-12 20:50
柳超 发表于 2014-11-12 20:48
class Demo {
        public static void main(String[] args) {
                 int x = 2;

开始我也不认为是0  后来在网上有人说是0  自己就运行了一下 是0啊   不明白了
作者: 柳超    时间: 2014-11-12 20:55
  1. class  Bug
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 int i = 2;
  6.                 i++;
  7.                 {
  8.                 System.out.println(i/3);
  9.                 }
  10.         }
  11. }
复制代码

这样写结果是1如果你不信 !我可以给你上图
作者: 李春江    时间: 2014-11-12 21:01
本帖最后由 李春江 于 2014-11-12 21:03 编辑
也许_还不懂 发表于 2014-11-12 20:27
若x=2,则表达式(x++)/3的值是?  
我用Java运行了一下结果是0
代码是class Demo {        public static ...

楼主你不是在逗我吧,你看好了
1.int x=2;
2.x++;相当于x=x+1;此时x的值位3;
3.(x++)/3=3/3=1;但是x的值为4,因为(x++)的作用是先使用后自加缘故。
综合:结果为1;不可能为0;已通过编译测试,确实为1.
作者: 也许_还不懂    时间: 2014-11-12 21:16
李春江 发表于 2014-11-12 21:01
楼主你不是在逗我吧,你看好了
1.int x=2;
2.x++;相当于x=x+1;此时x的值位3;

class Demo {
        public static void main(String[] args) {
                int x = 2; {
                        System.out.println((x++)/3);
                }
        }
}
这道题 只有问题  代码是我自己写的   这是我写的  结果是0  
作者: 也许_还不懂    时间: 2014-11-12 21:17
柳超 发表于 2014-11-12 20:55
这样写结果是1如果你不信 !我可以给你上图

class Demo {
        public static void main(String[] args) {
                int x = 2; {
                        System.out.println((x++)/3);
                }
        }
}
这道题 只有问题  代码是我自己写的   这是我写的  结果是0  
作者: 也许_还不懂    时间: 2014-11-12 21:19
柳超 发表于 2014-11-12 20:55
这样写结果是1如果你不信 !我可以给你上图

问题是      若x=2,则表达式(x++)/3的值是?
作者: 也许_还不懂    时间: 2014-11-12 21:20
李春江 发表于 2014-11-12 21:01
楼主你不是在逗我吧,你看好了
1.int x=2;
2.x++;相当于x=x+1;此时x的值位3;

问题是  若x=2,则表达式(x++)/3的值是?
作者: 柳超    时间: 2014-11-12 21:34
也许_还不懂 发表于 2014-11-12 21:20
问题是  若x=2,则表达式(x++)/3的值是?

先执行表达式! 然后 x 加1
也就是説      除3 的结果是 0       后   x + 1
作者: 也许_还不懂    时间: 2014-11-12 21:34
李春江 发表于 2014-11-12 20:21
应该X++是先使用X的值,然后再自加一下。所以应该为0(2/3)+1=1;

Sorry 我问题没说明白  耽误时间了  
作者: 也许_还不懂    时间: 2014-11-12 21:36
柳超 发表于 2014-11-12 20:55
这样写结果是1如果你不信 !我可以给你上图

Sorry 我问题没说明白  耽误时间了
作者: cs8630323    时间: 2014-11-13 15:57
表达能力有待提高,还有帖子可以编辑的
作者: 200米王朝    时间: 2014-11-13 17:26
本帖最后由 200米王朝 于 2014-11-13 17:27 编辑

(x++) / 3

先运算2/3,X再自增1.



楼主代码写错了吧, 按楼主你的代码 X=2, X++
那打印的结果 X=3


作者: javaAndroid    时间: 2014-11-13 20:32
本帖最后由 javaAndroid 于 2014-11-13 20:36 编辑

先加与后加的问题
(x++)/3意思是,先用x进行操作之后再自增1
也就是说这句话相当于执行x/3之后,x=x+1
如果写为(++x)/3,答案就是1了。但x++单独作为一个语句的话
和++x作为一个单独语句的话
二者结果是没区别的
但是int x=2;x++;
然后再执行(x++)/3,结果就为1了。执行完这句x的值为4.

作者: 李春江    时间: 2014-11-13 22:58
也许_还不懂 发表于 2014-11-12 21:17
class Demo {
        public static void main(String[] args) {
                int x = 2; {

这个必须是0 啊
x=2;
(x++)/3;先使用x的值;即2/3=0;但是如果你打印X的值就是3 了,因为已经使用过了,x会自动+1的
注意:希望楼主不要再问这个问题了,如果真不懂,你应该好好补习计算机常识了:L
作者: 苑桥别馆    时间: 2014-11-13 23:11
一个是前加一个是后加
作者: 也许_还不懂    时间: 2014-11-14 10:16
李春江 发表于 2014-11-13 22:58
这个必须是0 啊
x=2;
(x++)/3;先使用x的值;即2/3=0;但是如果你打印X的值就是3 了,因为已经使用过了, ...

额 ,我主要是想看看我根据这道题自己写的代码对不对  现在明白为什么是0了  谢谢你啦
作者: 高昌德    时间: 2014-11-14 10:24
x++先操作x的值,再++
++x先自增1再操作
作者: 郑飞    时间: 2014-11-14 19:19
也许_还不懂 发表于 2014-11-14 10:16
额 ,我主要是想看看我根据这道题自己写的代码对不对  现在明白为什么是0了  谢谢你啦 ...

看来楼主算的没错 就是脑子里一直记着那个表达式 所以把返回值记成是表达式的值了 刚开始经常犯这个错;P
作者: chenweizuo    时间: 2014-11-14 20:39
这道题是先增和后增的问题。
作者: a8851625    时间: 2014-11-14 20:59
也许_还不懂 发表于 2014-11-12 21:20
问题是  若x=2,则表达式(x++)/3的值是?

肯定是0啊,x++表示先用后加,所以你表达式是先2/3=0,然后再加1.但是你输出的就是2/3。绝对是0的
作者: zrq681722    时间: 2014-11-14 21:00
我看着也是1啊
作者: 也许_还不懂    时间: 2014-11-15 19:26
郑飞 发表于 2014-11-14 19:19
看来楼主算的没错 就是脑子里一直记着那个表达式 所以把返回值记成是表达式的值了 刚开始经常犯这个错 ...

是的 ,哇  高级黑马  好厉害
作者: 也许_还不懂    时间: 2014-11-15 19:27
a8851625 发表于 2014-11-14 20:59
肯定是0啊,x++表示先用后加,所以你表达式是先2/3=0,然后再加1.但是你输出的就是2/3。绝对是0的 ...

还是你这句解释的明白,一下就能懂
作者: xiaguangcheng    时间: 2014-11-15 21:26
也许_还不懂 发表于 2014-11-12 20:27
若x=2,则表达式(x++)/3的值是?  
我用Java运行了一下结果是0
代码是class Demo {        public static ...

因为后++是先进行其他运算,然后再自增。所以x++/3,就是2/3。当2/3的运算做完之后,才会来做
x++就是自增的运算。2/3在int类型中,由于是0.6666……,也就是不到1,就会取整为0.




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