黑马程序员技术交流社区

标题: 关于三元运算符 [打印本页]

作者: 孙浩    时间: 2012-11-24 00:32
标题: 关于三元运算符
本帖最后由 孙浩 于 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);
}
}

作者: 蔡兆军    时间: 2012-11-24 00:58
本帖最后由 蔡兆军 于 2012-11-24 01:00 编辑

应该是这么写  grade = (score>=90?'A':score>60?'B':'C'));
?后面是判断完后是 应该取的值,不是赋值给grade。
作者: 张海涛    时间: 2012-11-24 01:32
你在三元表达式前面已经写了grade了,三元表达式会将运算结果赋值给grade,在表达式内部就不必写grade了,代码应该为:
grade = score<60?'C':score<90?'B':'A';
楼上说的也对,不过后面多了个“)”。
作者: 奋斗的青春    时间: 2012-11-24 01:40
  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. }
复制代码

作者: 马良    时间: 2012-11-24 08:36
三元运算符相当于是简化了if else判断语句,在你的这个例子里返回的应该是一个值,而不是一个赋值语句,所以,既然你的语句前面既然加了grade=来接收三元运算符判断的结果,那“?”后面的应该就是一个值,而不能是一个赋值语句。
作者: 王阳    时间: 2012-11-24 10:16
int score=67 ;
                  char grade;
                  grade =  score>=90?'A':score>60?'B':'C';
                  System.out.println(grade);
改成这样应该可以了
作者: 孙浩    时间: 2012-11-24 13:14
本帖最后由 孙浩 于 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';





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