A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

© 钟成军 高级黑马   /  2014-4-18 21:29  /  1393 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 钟成军 于 2014-4-18 21:39 编辑

int a,b,c;
a=1;
b=2;
c = (a+b>3?a++:b++);
System.out.println(a+":"+b+":"+c);

我预想的输出结果是:  2:3:2  
但实际结果是:  1:3:2   有点没搞明白,难道a没有+1吗?那什么c 的值又是2??
求详解!

9 个回复

倒序浏览
本帖最后由 Kelvinhu 于 2014-4-18 21:46 编辑
  1. class  
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 int a,b,c;
  6.                 a=1;
  7.                 b=2;
  8.                 //c = (a+b>3?a++:b++); //三元操作符相当于:
  9.                 if (a+b>3)
  10.                 {
  11.                         c=a;
  12.                         a++
  13.                 }
  14.                 else{
  15.                         c=b;
  16.                         b++
  17.                 }
  18.                 System.out.println(a+":"+b+":"+c);
  19.         }
  20. }
复制代码
三元操作符的问题。开始搞错了= =
回复 使用道具 举报
c = (a+b>3?a++:b++);这句话是这样执行的,1+2>3?不是,那么执行b++,而不执行a++,b++执行之前将b的值赋给c,所以c为2,b++执行,b为3,a++没有执行,所以a为1,所以结果就是1:3:2
回复 使用道具 举报
月光海 发表于 2014-4-18 21:36
c = (a+b>3?a++:b++);这句话是这样执行的,1+2>3?不是,那么执行b++,而不执行a++,b++执行之前将b的值赋给 ...

恩,是的,a++并没有执行
回复 使用道具 举报
                int a, b, c;
                a = 1;
                b = 2;
                c = (a + b > 3 ? a++ : b++);
                // 上面这句话需要分成3部分
                // 1、a + b > 3
                // 2、 a++
                // 3、b++
                // 在第一步3>3不成立 就直接执行b++,a++不会执行
                // 所以c = (a + b > 3 ? a++ : b++);的执行结果相当于是 c = b++ ;
                // 最后所以c=2,b=3,a=1
                System.out.println(a + ":" + b + ":" + c);
回复 使用道具 举报
运行这段代码,你就明白了。
  1. package it.cast;

  2. public class Test {

  3.    public static void main(String[] args) {
  4.            int a,b,c;
  5.            a=1;
  6.            b=2;
  7.            //c = (a+b>3?a++:b++);
  8.            if(a+b >3)
  9.            {
  10.                    c=a++;
  11.                    System.out.println("if c ="+ c);
  12.                    System.out.println("if  a = "+a);
  13.            }
  14.                   
  15.            else
  16.            {
  17.                     c=b++;
  18.                     System.out.println("else  c = "+c);
  19.                     System.out.println("else  b ="+b);
  20.                   
  21.            }
  22.                   
  23.            System.out.println(a+":"+b+":"+c);
  24.    }
复制代码
回复 使用道具 举报
  1. public class Test {
  2.     public static void main (String[]args) {
  3. int a,b,c;
  4. a=1;
  5. b=2;
  6. c = (a+b>3?a++:b++);//这里就理解为1,a+b>3么?如果true,就执行a++,如果不是就执行b++(显然false)。那么a++被跳过,返回b的值赋给c,执行b++(b++与++b的区别就在于一个先运算后自加1,一个先自加1再运算)
  7. System.out.println(a+":"+b+":"+c);
  8. }
  9. }
复制代码

所以结果是a=1,b=3(自加后),c=2
回复 使用道具 举报
左拉 中级黑马 2014-4-19 09:49:23
8#
本帖最后由 左拉 于 2014-4-19 19:47 编辑

  1. public class Test{
  2.     public static void main(String[] args){
  3.    int a,b,c;
  4.    a=1;
  5.    b=2;
  6.    c = (a+b>3?a++:b++);
  7.    /*第一步:计算a+b=3;
  8.      此时a=1,b=2;</P>
  9.    */
  10.    /*第二步:判断a+b>3;结果为false;
  11.    此时a=1,b=2;
  12.   */
  13.    /*第三步:执行b++运算,a的值不变;
  14.       此时a=1;c=b++;c=2;b=3;
  15.   */
  16.   System.out.println(a+":"+b+":"+c);

  17.   }
  18. }
复制代码
回复 使用道具 举报
彭飞 中级黑马 2014-4-20 15:51:48
9#
本帖最后由 彭飞 于 2014-4-20 15:54 编辑

可能楼主对有些知识点产生了误区。

首先   i?j:l   
【i】是一个布尔boolean表达式,   后面分别是true:false。  
那么true是【j】,false是【l】
(a + b > 3 ? a++ : b++);  就是  (a + b 大于3吗? a++大于 : b++不大于);

a + b =3  大于3吗 不大于,所以  c = (a + b > 3 ? a++ : b++);就是c=b++;

随便提一下,前加加和后加加。
假设a=1  
c=++a;是加了再赋值,   c=2.a=2
c=a++;则是赋值了再加。c=1.a=2.

所以,c=b++=2,  b=3, a不变
最后输出结果就是     1:3:2.

我觉得这么理解就很简单了,楼主可以参考一下。


回复 使用道具 举报
三目运算符,从左向右,c = (Boolean?a++:b++;)
如果true,冒号前赋值给c,否则冒号后赋值c.
++b.和b++。的区别,++b.是先b+1.在赋值。b++是先赋值,在b+1.

这道题,你的错误是认为冒号前后都执行,其实不是。相当于咱的选择结构,只不过三目运算符效率高
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马