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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© itheima_llt 高级黑马   /  2015-4-10 10:37  /  3156 人查看  /  42 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 itheima_llt 于 2015-4-11 21:53 编辑

已知学生成绩以100分为满分,共分5个等级:A,B,C,D,E。    90~100为等级A,80~89为等级B,70~79为等级C,    60~69为等级D,0~59为等级E。    要求定义一个成绩变量,当成绩变化时,可直接知道该成绩对应的等级。   
例如:当成绩为100时,该学生的等级时A。
需求分析:   1.定义一个功能,通过给定的分数,获得对应的等级   
2.明确功能的结果:等级。char。
  3.有没有未知的内容:分数。int
  1. //解法一:
  2. class Demo
  3. {
  4.         public static void main(String[] args)
  5.         {
  6.                 graceDegree(100);
  7.                 graceDegree(0);
  8.                 graceDegree(-100);
  9.         }

  10.         static void graceDegree(int grace)
  11.         {
  12.                 if(grace < 0|| grace >100)
  13.                         System.out.println("Wrong ");
  14.                 else if(grace >=90 &&grace <= 100)
  15.                         System.out.println("A");
  16.                 else if(grace >=80 &&grace <= 89)
  17.                         System.out.println("B");
  18.                 else if(grace >=70 &&grace <= 79)
  19.                         System.out.println("C");
  20.                 else if(grace >=60 &&grace <= 69)
  21.                         System.out.println("D");
  22.                 else
  23.                         System.out.println("E");
  24.         }
  25. }
复制代码
  1. //解法二
  2. class Demo
  3. {
  4.         public static void main(String[] args)
  5.         {
  6.                 char ch =getLevel(10);
  7.                 //char ch1 =getLevel(60);
  8.                 //char ch2 =getLevel(70);
  9.                 //char ch3 =getLevel(80);
  10.                 //char ch4 =getLevel(90);
  11.                 //char ch5 =getLevel(-10);
  12.                 System.out.println("level = "+ch);
  13.         //        System.out.println("level = "+ch1);
  14.         //        System.out.println("level = "+ch2);
  15.         //        System.out.println("level = "+ch3);
  16.     //        System.out.println("level = "+ch4);
  17.                 //System.out.println("level = "+ch5);

  18.         }

  19.         public static char getLevel(int grace)//不可以返回String类型,编译无法通过
  20.         {
  21.                 char level;
  22.                 if(grace >=90 && grace <=100)
  23.                         level = 'A';
  24.                 else if(grace >=80 && grace <=89)
  25.                         level = 'B';
  26.                 else if(grace >=70 && grace <=79)
  27.                         level = 'C';               
  28.                 else if(grace >=60 && grace <=69)
  29.                         level = 'D';
  30.                 else if(grace >=0 && grace <=59)
  31.                         level = 'E';
  32.                 else
  33.                         level = 'M';//无意义,但是少了这一句,当grace小于0或者大于100的时候,编译无法通过
  34.                 return level;

  35.         }
  36. }
复制代码
  1. //解法一 参考16楼优化一下:
  2. class Demo
  3. {
  4.         public static void main(String[] args)
  5.         {
  6.                 graceDegree(100);
  7.                 graceDegree(0);
  8.                 graceDegree(-100);
  9.         }

  10.         static void graceDegree(int grace)
  11.         {
  12.                 if(grace < 0|| grace >100)
  13.                         System.out.println("Wrong ");
  14.                 else if(grace >=90)
  15.                         System.out.println("A");
  16.                 else if(grace >=80)
  17.                         System.out.println("B");
  18.                 else if(grace >=70)
  19.                         System.out.println("C");
  20.                 else if(grace >=60)
  21.                         System.out.println("D");
  22.                 else
  23.                         System.out.println("E");
  24.         }
  25. }
复制代码
  1. //解法三
  2. class Demo
  3. {
  4.         public static void main(String[] args)
  5.         {
  6.                 getLevel(100);
  7.                 getLevel(94);
  8.                 getLevel(0);
  9.                 getLevel(-100);
  10.         }

  11.         public static void getLevel(int grace)
  12.         {
  13.                 switch(grace/10)
  14.                 {
  15.                         case 10:
  16.                         case 9:
  17.                                 System.out.println("A");break;
  18.                         case 8:
  19.                                 System.out.println("B");break;
  20.                         case 7:
  21.                                 System.out.println("C");break;
  22.                         case 6:
  23.                                 System.out.println("D");break;
  24.                         case 5:
  25.                         case 4:
  26.                         case 3:
  27.                         case 2:
  28.                         case 1:
  29.                         case 0:
  30.                                 System.out.println("E");break;
  31.                         default:
  32.                                 System.out.println("Wrong ");break;
  33.                 }
  34.         }
  35. }
复制代码
解法三,谢谢21楼帮忙优化!




42 个回复

倒序浏览
不错哦,看好你哟,加油!

点评

谢谢!!!  发表于 2015-4-10 12:48
回复 使用道具 举报
看好你 大神!

点评

菜鸟一枚,求指正!  发表于 2015-4-10 12:45
回复 使用道具 举报
膜拜 大神!:P

点评

囧,菜鸟一枚!  发表于 2015-4-10 12:43
回复 使用道具 举报
这个代码的条件还可以继续优化为更简洁的

点评

求指教,麻烦讲解一下,最好附上代码!  发表于 2015-4-10 16:47
回复 使用道具 举报
可不可以教教我,你的这代码是粘在那个地方发表的啊?发表出来像编辑器一样,我是新手,不会,,
回复 使用道具 举报
Mr.Cai 发表于 2015-4-10 13:57
可不可以教教我,你的这代码是粘在那个地方发表的啊?发表出来像编辑器一样,我是新手,不会,, ...

注意复制的内容不要有格式,要是txt文档!

第一步.jpg (50.12 KB, 下载次数: 37)

第一步.jpg

第二步.jpg (78.75 KB, 下载次数: 40)

第二步.jpg

第三步.jpg (21.77 KB, 下载次数: 33)

第三步.jpg
回复 使用道具 举报
支持你,同志,你的两个代码都是用条件语句实现的,为何不用switch()case语句呢?
在下也是新手,你的发帖粘贴代码受教了!

点评

用的少,不熟。。。我试试看。  发表于 2015-4-10 16:58
回复 使用道具 举报
静心明德 发表于 2015-4-10 16:56
支持你,同志,你的两个代码都是用条件语句实现的,为何不用switch()case语句呢?
在下也是新手,你的发帖 ...

case后面的常量表达式只支持五种基本类型:int ,chart, byte, short, enum。(枚举类型我不熟,我不知道啊)
这题还是用if else嵌套好一点。
回复 使用道具 举报
String类型是可以返回的 ,返回什么类型就用什么类型接收
回复 使用道具 举报
挺好,赞一个。
回复 使用道具 举报
itheima_llt 发表于 2015-4-10 17:14
case后面的常量表达式只支持五种基本类型:int ,chart, byte, short, enum。(枚举类型我不熟,我不知道 ...

是的  swicth对范围类型 不好判断
回复 使用道具 举报
矮油 不错
回复 使用道具 举报
加油坚持!
回复 使用道具 举报
C#的啊,用成绩除以10得到十位数上的值,然后用swith...case...
回复 使用道具 举报
windform 发表于 2015-4-10 13:24
这个代码的条件还可以继续优化为更简洁的

试试这个结构,是不是更简单高效

public static char getLevel(int grace)
{
               char level;
                if(grace>100||grace<0)
               {
                   level =  'M'
                  return level;
               }

                if(grace >=90 )
                        level = 'A';
                else if(grace >=80)
                        level = 'B';
                else if(grace >=70)
                        level = 'C';               
                else if(grace >=60 )
                        level = 'D';
                else
                        level = 'E';
              
               return level;
}

点评

嗯嗯,确实看上去简洁一些。  发表于 2015-4-11 12:16
回复 使用道具 举报
windform 发表于 2015-4-11 10:53
试试这个结构,是不是更简单高效

public static char getLevel(int grace)

哈哈,生命不止,代码优化不息。加油。
回复 使用道具 举报
itheima_llt 发表于 2015-4-10 17:14
case后面的常量表达式只支持五种基本类型:int ,chart, byte, short, enum。(枚举类型我不熟,我不知道 ...

jdk1.7之后支持String类型

点评

收到,谢谢提醒!  发表于 2015-4-11 17:53
回复 使用道具 举报
sisel 中级黑马 2015-4-11 18:49:17
19#
还可以优化  用switch(grace/10) 来判断

点评

收到!  发表于 2015-4-11 19:56
回复 使用道具 举报
不错   加油!~~ 争取早日进入黑马班
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马