黑马程序员技术交流社区

标题: 我的编程练习 [打印本页]

作者: itheima_llt    时间: 2015-4-10 10:37
标题: 我的编程练习
本帖最后由 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楼帮忙优化!





作者: 百思不得解    时间: 2015-4-10 10:45
不错哦,看好你哟,加油!
作者: 煎饼果子    时间: 2015-4-10 12:17
看好你 大神!
作者: ぃ鉲布奇诺    时间: 2015-4-10 12:28
膜拜 大神!:P
作者: windform    时间: 2015-4-10 13:24
这个代码的条件还可以继续优化为更简洁的

作者: Mr.Cai    时间: 2015-4-10 13:57
可不可以教教我,你的这代码是粘在那个地方发表的啊?发表出来像编辑器一样,我是新手,不会,,
作者: itheima_llt    时间: 2015-4-10 16:45
Mr.Cai 发表于 2015-4-10 13:57
可不可以教教我,你的这代码是粘在那个地方发表的啊?发表出来像编辑器一样,我是新手,不会,, ...

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

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

第一步.jpg

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

第二步.jpg

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

第三步.jpg

作者: 静心明德    时间: 2015-4-10 16:56
支持你,同志,你的两个代码都是用条件语句实现的,为何不用switch()case语句呢?
在下也是新手,你的发帖粘贴代码受教了!
作者: itheima_llt    时间: 2015-4-10 17:14
静心明德 发表于 2015-4-10 16:56
支持你,同志,你的两个代码都是用条件语句实现的,为何不用switch()case语句呢?
在下也是新手,你的发帖 ...

case后面的常量表达式只支持五种基本类型:int ,chart, byte, short, enum。(枚举类型我不熟,我不知道啊)
这题还是用if else嵌套好一点。

作者: yxnheima    时间: 2015-4-10 22:43
挺好,赞一个。
作者: thoris    时间: 2015-4-10 23:07
itheima_llt 发表于 2015-4-10 17:14
case后面的常量表达式只支持五种基本类型:int ,chart, byte, short, enum。(枚举类型我不熟,我不知道 ...

是的  swicth对范围类型 不好判断
作者: 野马奔腾    时间: 2015-4-10 23:16
矮油 不错
作者: 黑色救护车    时间: 2015-4-11 07:49
加油坚持!
作者: 无声风铃    时间: 2015-4-11 08:54
C#的啊,用成绩除以10得到十位数上的值,然后用swith...case...
作者: windform    时间: 2015-4-11 10:53
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;
}
作者: windform    时间: 2015-4-11 12:19
windform 发表于 2015-4-11 10:53
试试这个结构,是不是更简单高效

public static char getLevel(int grace)

哈哈,生命不止,代码优化不息。加油。
作者: 静心明德    时间: 2015-4-11 17:52
itheima_llt 发表于 2015-4-10 17:14
case后面的常量表达式只支持五种基本类型:int ,chart, byte, short, enum。(枚举类型我不熟,我不知道 ...

jdk1.7之后支持String类型
作者: sisel    时间: 2015-4-11 18:49
还可以优化  用switch(grace/10) 来判断
作者: 徐顺醒    时间: 2015-4-11 21:24
不错   加油!~~ 争取早日进入黑马班
作者: 俊勇    时间: 2015-4-11 21:34

  1. class Demo
  2. {
  3.        public static void main(String[] args)
  4.       {
  5.                 getLevel(100);
  6.                 getLevel(94);
  7.                 getLevel(0);
  8.                 getLevel(-100);
  9.      }

  10.      public static void getLevel(int grace)
  11.     {
  12.             switch(grace/10)
  13.            {
  14.                   case 10:
  15.                          System.out.println("A");break;
  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.       }
复制代码





作者: 帆风顺    时间: 2015-4-12 00:15
这么多方法!
作者: Sylvanas    时间: 2015-4-12 00:20
不错不错,不过你这技术分这么多了,应是大神级别了哦
作者: itheima_llt    时间: 2015-4-12 22:00
{:3_54:}什么时候才能升级到高级黑马呢?
作者: 梦逆光377    时间: 2015-4-12 22:03
哈哈哈 不错不错赞一个
作者: Mr.Cai    时间: 2015-4-19 20:18
itheima_llt 发表于 2015-4-10 16:45
注意复制的内容不要有格式,要是txt文档!

嗯,谢谢你啊,懂了,嘿嘿
作者: 晓月清晖明    时间: 2015-4-19 21:05
大神啊。
作者: q8387811    时间: 2015-4-19 22:05
大神  看好你!!!!!!
作者: cody    时间: 2015-4-19 23:05
楼主用什么软件写程序的?




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