黑马程序员技术交流社区

标题: 问两个小问题?? [打印本页]

作者: woshihuoye    时间: 2013-12-21 00:04
标题: 问两个小问题??
为什么这个代码

class  TextFor
{
        public static void main(String[] args)
        {
          int b=1;
          for (int a=1;a<=100; a++)
          {
       (a%7==0)?b++:a;

          }
      System.out.println(b);
        }
}
编译时,1.dos控制台会说(a%7==0)?b++:a;不是语句,编译失败呢?
            2.当把(a%7==0)?b++:a;这段改写成System.out.println((a%7=0)?b++:a);
编译时,dos反馈这段代码需要:变量;找到:值。错在哪里?
作者: 四五六七八    时间: 2013-12-21 00:10
(a%7==0)?b++:a;的结果是一个值 这个值没有被变量指向,
int a=b;上面的代码就相当于这里的b 没有定义变量去保存值
作者: woshihuoye    时间: 2013-12-21 00:16
四五六七八 发表于 2013-12-21 00:10
(a%7==0)?b++:a;的结果是一个值 这个值没有被变量指向,
int a=b;上面的代码就相当于这里的b 没有定义变量 ...

o,有点懂了,就是说这个结果是个值,不是执行语句的意思么?
作者: 四五六七八    时间: 2013-12-21 12:39
woshihuoye 发表于 2013-12-21 00:16
o,有点懂了,就是说这个结果是个值,不是执行语句的意思么?

是的     ,。。。。。。。
作者: IT人    时间: 2013-12-21 13:01
(a%7==0)?b++:a这句话实际上有返回值,需要你用变量保存一下!然后输出变量就行了
作者: 恩恩    时间: 2013-12-21 17:28
首先你需要了解这个(a%7==0)?b++:a;这句话是干什么的,这句话的结果是一个值,你需要给他一个变量,让这个变量等于这个的结果,这样才算完整。要不然就相当于a+b。打印的时候也一样。
作者: 【灰太狼】    时间: 2013-12-21 18:52
  1. (a%7==0)?b++:a;
复制代码

a?b:c;
这个的意思是判断a是不是为true,true的话执行b,false的话执行c,而你写的这个是判断a能否被7整除,能整除,就把b加一,这没有问题。
而为false的时候呢?执行了什么?你只写了一个a,这不是语句,你或者写个a++都行。
作者: panzhenglian    时间: 2013-12-21 20:07
这个三元运算符运算出来的结果没有指向,所以会报错,在运算符前面加一个变量即可.比如
  1. class  TextFor
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.           int b=1;
  6.           int c=0;
  7.           for (int a=1;a<=100; a++)
  8.           {
  9.                  c=(a%7==0)?b++:a;
  10.                
  11.           }
  12.       System.out.println(c);
  13.         }
  14. }
复制代码






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