黑马程序员技术交流社区

标题: 昨天看问题、发现一个不明白的。求解。。 [打印本页]

作者: 黑马刘洋    时间: 2012-6-14 10:59
标题: 昨天看问题、发现一个不明白的。求解。。
本帖最后由 黑马刘洋 于 2012-6-14 11:01 编辑

class Test2

{

        public static void main(String[] args) {

                int x=3;

                System.out.println( (x>4)?9.9:19.72 );

        }

}
输出的答案是19.72,有点石化了。求解。。。
作者: 黑马李亮    时间: 2012-6-14 11:00
因为现在这个8不是整型的 而是  字符串  
作者: 李盼    时间: 2012-6-14 11:02
(x>4)?9.9:19.72
三目表达式啊,X>4不成立,所以结果为:后面的值啊,就是19.72
作者: 李盼    时间: 2012-6-14 11:03
条件表达式?值1:值2
当表达式成立,结果为值1,表达式不成立,结果为值2!
作者: 钟成军    时间: 2012-6-14 11:04
晕,3>4为false,肯定输出后面的啊,没有一点错啊?
作者: 王超    时间: 2012-6-14 11:09
{:soso_e101:}  你想问什么 ?
作者: 火焱    时间: 2012-6-14 11:12
三目运算,建议楼主先学习编程基础~
作者: 胡大强    时间: 2012-6-14 11:14
其实这是一个类型自动转换。。。。。如果你吧前面的9.9,改为9的话 输出的就是8
作者: 逝去的记忆ヽ    时间: 2012-6-14 11:14
这个表达式就是
x<y?表达式1,表达式2
当x<y为真的时候,输出表达式1
当x<y为假的时候,输出表达式2
多练习练习就好了  你这个问题很好解决了

作者: 胡大强    时间: 2012-6-14 11:16
现在这是正确的啊
作者: 黑马刘洋    时间: 2012-6-14 11:42
好吧、我知道了、但是我想我知道哪里没懂了、现在知道了
作者: 王晓新    时间: 2012-6-14 12:26
胡大强 发表于 2012-6-14 11:14
其实这是一个类型自动转换。。。。。如果你吧前面的9.9,改为9的话 输出的就是8 ...

这位同学,为嘛将9.9改为9的话,输出的就是8了呢,哪里出现了8?改成9输出的也会是19.72
作者: 胡卿    时间: 2012-6-14 12:32
三目运算自己不理解,建议仔细看看
作者: yllw258    时间: 2012-6-14 12:56
这是三元运算符,当表达式的值为真时,输出第一个,为假时,输出第二个,因此答案是正确的
作者: 党巾水    时间: 2012-6-14 13:50
胡大强 发表于 2012-6-14 11:14
其实这是一个类型自动转换。。。。。如果你吧前面的9.9,改为9的话 输出的就是8 ...

不是吧?

本帖最后由 黑马刘洋 于 2012-6-14 11:01 编辑


class Test2

{

        public static void main(String[] args) {

                int x=3;

                System.out.println( (x>4)?9.9:19.72 );

        }

}

怎么显示出来8?谢谢指教
作者: 党巾水    时间: 2012-6-14 13:50
胡大强 发表于 2012-6-14 11:14
其实这是一个类型自动转换。。。。。如果你吧前面的9.9,改为9的话 输出的就是8 ...

不是吧?

本帖最后由 黑马刘洋 于 2012-6-14 11:01 编辑


class Test2

{

        public static void main(String[] args) {

                int x=3;

                System.out.println( (x>4)?9.9:19.72 );

        }

}

怎么显示出来8?谢谢指教
作者: 杨卫腾    时间: 2012-6-14 14:22
三目(元)运算符:
形式: 表达式1? 表达式2: 表达式3
比如:max = (x>4)? a: b   
(1).运算顺序是这样的:先求表达式1的值,如果值是 true, 则求解表达式2的值,max = a; 若是false ,则max = b;注意:表达式2 可以是数值表达式, 还可以是函数表达  式或者是赋值表达式。
(2).条件运算符的优先级高于赋值运算符,所以是先判断条件,然后在进行赋值运算,表达式一的括号可以不要。
楼主那个结果毫无疑问是正确的。
作者: 胡大强    时间: 2012-6-14 14:26
刘馨琪 发表于 2012-6-14 13:50
不是吧?

本帖最后由 黑马刘洋 于 2012-6-14 11:01 编辑

class Test2

{

        public static void main(String[] args) {

                int x=3;

                System.out.println( (x>4)?9.9:8);

        }

}

输出的是8.0
class Test2

{

        public static void main(String[] args) {

                int x=3;

                System.out.println( (x>4)?9:8 );

        }
这输出就是8啊。。。。
你这帖子是不是改过了。。为什么跟我第一次看的数据不一样?

}




作者: 党巾水    时间: 2012-6-14 14:31
胡大强 发表于 2012-6-14 14:26
class Test2

{

哦 , 明白啦!呵呵
作者: 党巾水    时间: 2012-6-14 14:31
胡大强 发表于 2012-6-14 14:26
class Test2

{

哦 , 明白啦!呵呵
作者: 彭超华    时间: 2012-6-14 17:10
三元运算符:
形式: 条件表达式?表达式2:表达式3
其中条件表达式1的返回值类型是布尔型的值,求值表达式2,3是除void以为任何类型的表达式,且他们的类型必须相同。
三元运算符是if--else的简化形式,比if-else 方便,效率高,但有其局限性,表达式2,和3不能是输出语句!整个三元运算符就是一个求值表达式,必须有返回值!





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