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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 孙浩 中级黑马   /  2012-11-24 00:32  /  1873 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 孙浩 于 2012-11-25 13:47 编辑

/*题目:利用条件运算符的嵌套来完成此题:学习成绩> =90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。   
1.程序分析:(a> b)?a:b这是条件运算符的基本例子。   
*/
请各位指点下面的代码错在哪里?求解?
class Test5
{
public static void main (String [] args)
{
  int score=67 ;
  char grade;
  grade =   score>=90?grade='A':score>60?grade='B':grade='C';
  System.out.println(grade);
}
}

评分

参与人数 1技术分 +1 收起 理由
奋斗的青春 + 1 呵呵 ,

查看全部评分

6 个回复

倒序浏览
本帖最后由 蔡兆军 于 2012-11-24 01:00 编辑

应该是这么写  grade = (score>=90?'A':score>60?'B':'C'));
?后面是判断完后是 应该取的值,不是赋值给grade。

点评

哥们,不带括号的 。  发表于 2012-11-24 01:37

评分

参与人数 1技术分 +1 收起 理由
奋斗的青春 + 1 赞一个!

查看全部评分

回复 使用道具 举报
你在三元表达式前面已经写了grade了,三元表达式会将运算结果赋值给grade,在表达式内部就不必写grade了,代码应该为:
grade = score<60?'C':score<90?'B':'A';
楼上说的也对,不过后面多了个“)”。

评分

参与人数 1技术分 +1 收起 理由
奋斗的青春 + 1 赞一个!

查看全部评分

回复 使用道具 举报
  1. package com.itheima.operator;

  2. public class TernaryOperatorDemo {

  3.         /**
  4.          * 题目:利用条件运算符的嵌套来完成此题:学习成绩> =90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。 1.程序分析:(a>
  5.          * b)?a:b这是条件运算符的基本例子。
  6.          *
  7.          * @param args
  8.          */
  9.         public static void main(String[] args) {
  10.                 // TODO Auto-generated method stub
  11.                 int score = 67;
  12.                 char grade;
  13. //                grade = score>=90?grade='A':score>60?grade='B':grade='C';
  14. //                grade =(Character) (score>=90?grade='A':score>60:grade='B':grade='C');
  15.                 grade = score>=90?'A':(score>60?'B':'C'); //三元运算符的嵌套 ,即为分区间判断
  16.                 System.out.println(grade);
  17.         }

  18. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1

查看全部评分

回复 使用道具 举报
三元运算符相当于是简化了if else判断语句,在你的这个例子里返回的应该是一个值,而不是一个赋值语句,所以,既然你的语句前面既然加了grade=来接收三元运算符判断的结果,那“?”后面的应该就是一个值,而不能是一个赋值语句。

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1

查看全部评分

回复 使用道具 举报
int score=67 ;
                  char grade;
                  grade =  score>=90?'A':score>60?'B':'C';
                  System.out.println(grade);
改成这样应该可以了

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1 赞一个!

查看全部评分

回复 使用道具 举报
孙浩 中级黑马 2012-11-24 13:14:23
7#
本帖最后由 孙浩 于 2012-11-24 16:50 编辑

grade =   score>=90?grade='A':score>60?grade='B':grade='C';
这句话错在哪里我明白了,是因为:在三元表达式前面已经写了grade了,三元表达式会将运算结果赋值给grade,在表达式内部就不必写grade了!
但是下面这句为什么编译不通过,?:表达式不是相当于if else吗
score>=90?grade ='A':grade='B';
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马