黑马程序员技术交流社区

标题: 这程序哪错了 [打印本页]

作者: tian139753    时间: 2015-8-27 23:26
标题: 这程序哪错了
class wenTi
{
        public static void main(String[] arge)
        {
                int a=5;
                int b=6;
                int sum;
                sum=a>b?a=a+b:b=a*b;
                System.out.println("sum="+sum);
        }
}

帮忙看看为什么编译出错???
作者: liudongcan    时间: 2015-8-28 00:04
错在三元表达式,应该是sum=a>b?a+b:a*b;
你的思路是将后面的值赋给sum。你可以将三目表达式转成if..else语句来排错。望采纳
作者: Morrfree    时间: 2015-8-28 00:36
最好还是把三元表达式中的返回值用括号括起来,当做一个整体.
比如这样sum=a>b?(a=a+b):(b=a*b);

作者: STARlove    时间: 2015-8-28 00:48
a=a+b和b=a*b再通过三元运算符,类型不对。。。一楼就是正解
作者: Ci功    时间: 2015-8-28 07:31
sum=a>b?a=a+b:b=a*b;
错了,
作者: 心之谷96    时间: 2015-8-28 07:36
一楼是对的。。。
作者: 血马雄风    时间: 2015-8-28 09:41
sum=a>b?a=a+b:b=a*b;     a=a+b,b=a*b;为啥用等号?
作者: tian139753    时间: 2015-8-28 22:21
liudongcan 发表于 2015-8-28 00:04
错在三元表达式,应该是sum=a>b?a+b:a*b;
你的思路是将后面的值赋给sum。你可以将三目表达式转成if..else语 ...

我就是不明白  那样为什么出错的
作者: tian139753    时间: 2015-8-28 22:22
Morrfree 发表于 2015-8-28 00:36
最好还是把三元表达式中的返回值用括号括起来,当做一个整体.
比如这样sum=a>b?(a=a+b):(b=a*b);
...

额   关键是冒号后面的要加
作者: tian139753    时间: 2015-8-28 22:24
STARlove 发表于 2015-8-28 00:48
a=a+b和b=a*b再通过三元运算符,类型不对。。。一楼就是正解

额   查了下  说是运算符优先级的问题
作者: tian139753    时间: 2015-8-28 22:25
Ci功 发表于 2015-8-28 07:31
sum=a>b?a=a+b:b=a*b;
错了,

编译的时候知道错了  只是当时不理解
作者: tian139753    时间: 2015-8-28 22:26
血马雄风 发表于 2015-8-28 09:41
sum=a>b?a=a+b:b=a*b;     a=a+b,b=a*b;为啥用等号?

想法就是先等号后面的值先赋给左边
作者: tian139753    时间: 2015-8-28 22:29
liudongcan 发表于 2015-8-28 00:04
错在三元表达式,应该是sum=a>b?a+b:a*b;
你的思路是将后面的值赋给sum。你可以将三目表达式转成if..else语 ...

是可以  但就是想知道这样为什么错了
作者: liudongcan    时间: 2015-8-28 22:42
  1. sum=a>b?a=a+b:b=a*b;
  2. //写成if...else是
  3. if(a>b){
  4. sum = a=a+b;//这明显是有问题的
  5. }else{
  6. sum = b=a*b;//这也一样
  7. //加括号就是
  8. sum=(b=a*b);// ok的
  9. //或者是
  10. sum = a*b
  11. }
复制代码

作者: cc3441251    时间: 2015-8-28 22:54
学习了,谢谢分享
作者: 寰宇天侠    时间: 2015-8-28 22:57
是代码优先级问题
int a=5,b=6;
a>b?a:b=1;相当于(a>b?a:b)=1;即6=1,所以提示   需要变量,是值
作者: 三井寿    时间: 2015-8-28 23:12
sum=a>b?a=a+b:b=a*b;这句话逻辑矛盾了 sum你等于的啥?你可以拆开写
作者: 喵小莫    时间: 2015-8-28 23:13
优先级        描述        运算符
1        括号        ()、[]
2        正负号        +、-
3        自增自减,非        ++、--、!
4        乘除,取余        *、/、%
5        加减        +、-
6        移位运算        <<、>>、>>>
7        大小关系        >、>=、<、<=
8        相等关系        ==、!=
9        按位与        &
10        按位异或        ^
11        按位或        |
12        逻辑与        &&
13        逻辑或        ||
14        条件运算        ?:
15        赋值运算        =、+=、-=、*=、/=、%=
16        位赋值运算        &=、|=、<<=、>>=、>>>=
作者: STARlove    时间: 2015-8-28 23:26
tian139753 发表于 2015-8-28 22:24
额   查了下  说是运算符优先级的问题

加油。。。。。。。。。。。。。。。。。。。。。。。。。。{:3_57:}
作者: Boint    时间: 2015-8-28 23:30
运算符优先级有错
作者: tian139753    时间: 2015-8-29 23:36
寰宇天侠 发表于 2015-8-28 22:57
是代码优先级问题
int a=5,b=6;
a>b?a:b=1;相当于(a>b?a:b)=1;即6=1,所以提示   需要变量,是值 ...

正解   老师也是这么讲解的
作者: qiaozengji668    时间: 2015-8-29 23:48
顶一下!!!





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