A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© woshihuoye 中级黑马   /  2013-12-21 00:04  /  1348 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

为什么这个代码

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反馈这段代码需要:变量;找到:值。错在哪里?

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

7 个回复

倒序浏览
(a%7==0)?b++:a;的结果是一个值 这个值没有被变量指向,
int a=b;上面的代码就相当于这里的b 没有定义变量去保存值
回复 使用道具 举报
四五六七八 发表于 2013-12-21 00:10
(a%7==0)?b++:a;的结果是一个值 这个值没有被变量指向,
int a=b;上面的代码就相当于这里的b 没有定义变量 ...

o,有点懂了,就是说这个结果是个值,不是执行语句的意思么?
回复 使用道具 举报 0 1
woshihuoye 发表于 2013-12-21 00:16
o,有点懂了,就是说这个结果是个值,不是执行语句的意思么?

是的     ,。。。。。。。
回复 使用道具 举报
(a%7==0)?b++:a这句话实际上有返回值,需要你用变量保存一下!然后输出变量就行了
回复 使用道具 举报
首先你需要了解这个(a%7==0)?b++:a;这句话是干什么的,这句话的结果是一个值,你需要给他一个变量,让这个变量等于这个的结果,这样才算完整。要不然就相当于a+b。打印的时候也一样。
回复 使用道具 举报
  1. (a%7==0)?b++:a;
复制代码

a?b:c;
这个的意思是判断a是不是为true,true的话执行b,false的话执行c,而你写的这个是判断a能否被7整除,能整除,就把b加一,这没有问题。
而为false的时候呢?执行了什么?你只写了一个a,这不是语句,你或者写个a++都行。

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
这个三元运算符运算出来的结果没有指向,所以会报错,在运算符前面加一个变量即可.比如
  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. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报 1 0
您需要登录后才可以回帖 登录 | 加入黑马