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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 马超 中级黑马   /  2012-7-7 14:00  /  2648 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

public static void test_5(int result)
        {
                /*if(result >= 90)
                {
                        System.out.println("优秀");
                }
                else if(result>=60 && result<90)
                {
                        System.out.println("良好");
                }
                else
                {
                        System.out.println("不及格");
                }*/
               
                StringBuffer sb = new StringBuffer();
                sb.append(result>=90&&result>=60?'A':'B');
                sb.append(result<60?'C':"");
}
为什么打印结果老是BC呢?  我传递的参数明明是一个不及格(results<60)的分数。。。

10 个回复

倒序浏览
因为你的判断有问题,如果你传的是59的话在第一个判断的时候返回false 所以sb.append了个"B",而第二次判断的时候59<60返回truesb又append了个'c',最后输出就是BC了。
注意append是追加字符串!
回复 使用道具 举报


StringBuffer sb = new StringBuffer();
                sb.append(result>=90&&result>=60?'A':'B'); //&&短路。前面的表达式结果为false,后面的表达式就不去验证真假直接跳过了。
                                                                //因为传递过来的数是小60的, result>=90&&result>=60?  结果为false。所以是结果是 B。

sb.append(result<60?'C':""); //传递过来的数小于60,result<60为true。所以结果是 C。

评分

参与人数 1技术分 +1 收起 理由
黑马张扬 + 1 赞一个!

查看全部评分

回复 使用道具 举报
而且,你的判断区间里没有60~90分这个分数段,你的第一个判断只能判断是不是大于等于90分,你用的&&,这个会造成短路模式,当分数小于90分的时候判断根本不会进入后面的result>=60这个判断,直接就赋值为B了。
建议还是像上面那样if-else判断吧。如果分要三元运算符的话也别用append了,这个会追加字符的,把你前面的都append进去了
回复 使用道具 举报
因为你result>=90&&result>=60的判断当result大于90时才判断是不是大于60,所以大于90了才添加A,当小于90时,因为是&&就 不用再判断右边了,第二个是小于60时才添加C,否则添加空,所以就算你输入一个80时第一个append也是添加的B,只有大于等于90了才添加A的。
回复 使用道具 举报
朱东方 发表于 2012-7-7 14:16
StringBuffer sb = new StringBuffer();
                sb.append(result>=90&&result>=60?'A':'B'); / ...

怎样用三元运算符解答呢?童鞋?:)
回复 使用道具 举报
本帖最后由 陈冲 于 2012-7-7 20:05 编辑
马超 发表于 2012-7-7 19:17
怎样用三元运算符解答呢?童鞋?

你可以尝试下三元运算符的嵌套使用
  1. public static void test_5(int result)
  2. {
  3.   StringBuffer sb = new StringBuffer();
  4.   sb.append((result>=90?'A':result)>=60?'B':'C');//首先判断result>=90,如果满足,则结果为A;如果不满足,则继续判断result>=60,如果满足,则结果为B,否则为C
  5. }
复制代码
回复 使用道具 举报
陈冲 发表于 2012-7-7 19:58
你可以尝试下三元运算符的嵌套使用

哇!大神啊!厉害啊!膜拜啊!
回复 使用道具 举报
马超 发表于 2012-7-7 20:08
哇!大神啊!厉害啊!膜拜啊!

sorry,上边的代码还是有问题
我试了一下,三元运算符,不管怎么嵌套都只有两个可能的结果,所以上边的代码只能得到结果B或者C,A是不可能得到的……
不好意思,没有帮上忙
我也是刚开始学,大神不敢当,大家一起进步哈~
回复 使用道具 举报
陈冲 发表于 2012-7-7 19:58
你可以尝试下三元运算符的嵌套使用

这样真的可以吗?
public static void test_5(int result)
{
  StringBuffer sb = new StringBuffer();
  sb.append((result>=90?'A':result)>=60?'B':'C');//首先判断result>=90,如果满足,则结果为A;如果不满足,则继续判断result>=60,如果满足,则结果为B,否则为C
}

你看啊,如果条件要是满足了,那么取到了'A'(char类型的) 由于它跟int类型是相互兼容的,那么
'A' 实际上就是97,接着进行后边的判断啊,满足了取到了B。。  结果不对啊,还是我理解错了啊?
回复 使用道具 举报
三元运算是两个结果啊.  牛人就是牛人,非要用三元运算做,就不能加个if吗?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马