黑马程序员技术交流社区
标题:
用三元运算符简化if语句时遇见了这个问题…
[打印本页]
作者:
黑马李磊
时间:
2013-2-17 00:34
标题:
用三元运算符简化if语句时遇见了这个问题…
本帖最后由 lileilove0376 于 2013-2-17 18:47 编辑
需求是获取1到100中7的倍数的个数?
正确代码是这样的
class For
{
public static void main(String[] args)
{
int count = 0;
for (int x = 1; x<=100&x%7==0; x++)
{
count++;
}
System.out.println("count="+count);
}
}
我想用三元运算符进行进一步简化就改了改代码,如下:
class For
{
public static void main(String[] args)
{
int count = 0;
for (int x = 1; x<=100; x++)
{
(x%7==0)?count++:count+=0;
}
}
}
但是编译的时候报错了,实在想不通…
我也分析了下运行的流程,没发现错误呀…前辈们帮我检查下,谢谢啦!
作者:
王国伟.
时间:
2013-2-17 01:25
本帖最后由 王国伟. 于 2013-2-17 02:38 编辑
三元运算符不要直接用,他是有返回值的,必须出现在赋值语句中,比如:int a=(4>5?4:5)就可以,不能单独作为语句使用。
三元运算符相对于普通的if-else语句更加简洁,但很容易就会产生可读性极差的代码,还有不能在for语句内嵌套三元运算符,for循环右侧要么为空要么就得是一个表达式,三元运算只是返回值而不是表达式。
三元运算符 (条件表达式)?表达式1:表达式2;
三元运算符的优点和弊端
优点:可以简化if...else书写 。
弊端:因为是一个运算符,所以运算完成后必须要有结果。
作者:
罗正荣
时间:
2013-2-17 01:31
我是这样弄的加一个变量Object z来记录三元运算的结果,还有把count+=0改为count+0
public static void main(String[] args)
{
int count = 0;
for (int x = 1; x<=100; x++)
{
Object z = (x%7==0)?count++ : count+0;
}
System.out.print("count="+count);
}
}
复制代码
作者:
黄玉昆
时间:
2013-2-17 10:12
我再补充几点啊:三元运算符的两个表达式:表达式一和表达式二,必须是void以外的任何类型的表达式,且它们的类型必须相同。必须返回相同类型的值,如果类型不同,就会报错的。不过,我测试了一下,其实这么说并不严格的。如果像正荣同学那么定义:Object z的话,编译是可以通过的,为什么呢?这是因为,Object是所有类的根类,就是所说的“上帝”,所以可以接纳各种类型的值;因此不会报错。但是我是不建议你这么写的,因为你这么写,是将错误隐藏了,本来要返回int型的,如果你返回double型的,那不就不对了嘛!比如返回14.5,这就不符合常理了,所以还是最好定义为指定类型。如果出错了,还能找到问题所在。以后在写程序的时候也是一样的,一定要越具体愈好,比如异常那,抛出的异常越具体越好。以后慢慢理解吧。测试的代码如下(自己最好测试一下,看看是什么问题啊):
class For
{
public static void main(String[] args)
{
int count = 0;
for (int x = 1; x<=100; x++)
{
int c = (x%7==0)?count++:count+0.0;
}
System.out.println(count);
}
}
复制代码
作者:
罗正荣
时间:
2013-2-17 10:43
黄玉昆 发表于 2013-2-17 10:12
我再补充几点啊:三元运算符的两个表达式:表达式一和表达式二,必须是void以外的任何类型的表达式,且它们 ...
嗯,有道理
作者:
風諾
时间:
2013-10-17 00:24
直接写成
count = (x%7==0)?++count:count;
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2