黑马程序员技术交流社区

标题: 用三元运算符简化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
  1. public static void main(String[]    args)   
  2. {
  3.         int count = 0;
  4.         for (int x = 1; x<=100; x++)
  5.         {
  6.        
  7.                 Object z = (x%7==0)?count++ : count+0;
  8.                
  9.                                
  10.         }
  11.         System.out.print("count="+count);
  12.        
  13. }
  14. }
复制代码

作者: 黄玉昆    时间: 2013-2-17 10:12
我再补充几点啊:三元运算符的两个表达式:表达式一和表达式二,必须是void以外的任何类型的表达式,且它们的类型必须相同。必须返回相同类型的值,如果类型不同,就会报错的。不过,我测试了一下,其实这么说并不严格的。如果像正荣同学那么定义:Object z的话,编译是可以通过的,为什么呢?这是因为,Object是所有类的根类,就是所说的“上帝”,所以可以接纳各种类型的值;因此不会报错。但是我是不建议你这么写的,因为你这么写,是将错误隐藏了,本来要返回int型的,如果你返回double型的,那不就不对了嘛!比如返回14.5,这就不符合常理了,所以还是最好定义为指定类型。如果出错了,还能找到问题所在。以后在写程序的时候也是一样的,一定要越具体愈好,比如异常那,抛出的异常越具体越好。以后慢慢理解吧。测试的代码如下(自己最好测试一下,看看是什么问题啊):
  1. class For
  2. {
  3.         public static void main(String[]    args)   
  4.         {
  5.                 int count = 0;
  6.                 for (int x = 1; x<=100; x++)
  7.                 {
  8.                         int c = (x%7==0)?count++:count+0.0;
  9.                 }
  10.                 System.out.println(count);
  11.         }
  12. }
复制代码

作者: 罗正荣    时间: 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