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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王明明 中级黑马   /  2012-6-13 10:32  /  7085 人查看  /  17 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 王明明 于 2012-6-13 12:37 编辑
  1. class LianXI
  2. {
  3.         public static void DengJi(int num)
  4.         {
  5.                 switch(num)
  6.                 {        
  7.                         case 100:
  8.                         case 90:
  9.                                 System.out.println("分数是"+num+"A");
  10.                                 break;

  11.                         case 89:
  12.                         case 80:
  13.                                 System.out.println("分数是"+num+"B");
  14.                                 break;
  15.                         case 79:
  16.                         case 70:
  17.                                 System.out.println("分数是"+num+"C");
  18.                                 break;
  19.                         case 69:
  20.                         case 60:
  21.                                 System.out.println("分数是"+num+"D");
  22.                                 break;
  23.                         case 59:
  24.                         case 0:
  25.                                 System.out.println("分数是"+num+"E");
  26.                                 break;
  27.                         default:
  28.                                 System.out.println("输入的不是有效的分数");
  29.                                 break;
  30.                 }
  31.                
  32.         }
  33.         public static void main(String[] args)
  34.         {
  35.               DengJi(46);
  36.         }
  37. }
复制代码
用switch 判断分数等级
想知道哪里出错了...
怎么改 会正常输出

17 个回复

倒序浏览
本帖最后由 吴超 于 2012-6-13 10:45 编辑

  1. <P>
  2. <FONT color=red>swith有局限性,当条件是具体几个值的时候,用swith会更有效路
  3. 如果是用来判断条件,还是用if语句或者while来
  4. </FONT>class LianXI
  5. {
  6.         public static void DengJi(int num)
  7.         {
  8.                 switch(num)
  9.                 {        
  10.                         case 100:
  11.                         case 90:
  12.                                 System.out.println("分数是"+num+"A");
  13.                                 break;</P>
  14. <P>                        case 89:
  15.                         case 80:
  16.                                 System.out.println("分数是"+num+"B");
  17.                                 break;
  18.                         case 79:
  19.                         case 70:
  20.                                 System.out.println("分数是"+num+"C");
  21.                                 break;
  22.                         case 69:
  23.                         case 60:
  24.                                 System.out.println("分数是"+num+"D");
  25.                                 break;
  26.                         case 59:
  27.                         case 0:
  28.                                 System.out.println("分数是"+num+"E");
  29.                                 break;
  30.                         default:
  31.                                 System.out.println("输入的不是有效的分数");
  32.                                 break;
  33.                 }
  34.                
  35.         }
  36.         public static void main(String[] args)
  37.         {
  38.               DengJi(46);         <FONT color=red> //你输入的是46,然后进入函数判断,按照顺序查找,没有发现符合的条件,   执行到default   输出   不是有效分数,返回,程序结束
  39. </FONT>        }
  40. }</P>
复制代码

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

回复 使用道具 举报
case 59:
case 0:
例如这一段,你想获取的范围是0-59,但是这里只接受0和59。switch是if else的简化版 ,在判断的次数表少的时候用会很方便。在这里如果你要用,只能是这样:case 59:case:58...case 1:case:0这样每一个数字都列出来,所以就会很麻烦,像这样判断次数多的,那就不用简化版了,直接还用if else。如下:
  1.                 if(num>=0 && num<60)
  2.                         System.out.println("分数是"+num+"E");
  3.                 else if(num>=60 && num<70)
  4.                         System.out.println("分数是"+num+"D");
  5.                 else if(num>=70 && num<80)
  6.                         System.out.println("分数是"+num+"c");
  7.                 else if(num>=80 && num<90)
  8.                         System.out.println("分数是"+num+"b");
  9.                 else if(num>=90 && num<=100)
  10.                         System.out.println("分数是"+num+"a");
  11.                 else
  12.                          System.out.println("输入的不是有效的分数");
  13.                
复制代码
回复 使用道具 举报
你是用的switch语句没有限定范围,switch没有if的范围限定 ,只可以是单个值的比较,如果你输入80,就会有结果的。你可以使用if语句
每个语句都有它的局限的 要灵活些。
if(num>=0&&num<=100)
                 {
                         if(num<=100&&num>90)
                         {
                                 System.out.println("分数是"+num+"A");
                         }else if(num<=90&&num>80)
                         {
                                 System.out.println("分数是"+num+"B");
                         }
                         //...
                 }else
                 {
                         System.out.println("输入的不是有效的分数");
                 }
回复 使用道具 举报
  1. class LianXI
  2. {
  3.         public static void DengJi(int num)
  4.         {
  5.                         char grade='n';
  6.                         if(num>=90&&num<=100)
  7.                         {
  8.                                 grade='A';
  9.                         }
  10.                         else if(num>=80)
  11.                         {
  12.                                 grade='B';
  13.                         }
  14.                         else if(num>=70)
  15.                         {
  16.                                 grade='C';
  17.                         }
  18.                         else if(num>=60){
  19.                                 grade='D';
  20.                         }
  21.                         else if(num>0)
  22.                         {
  23.                                 grade='E';
  24.                         }
  25.                 switch(grade)
  26.                 {      
  27.                         case 'A':
  28.                                 System.out.println("分数是"+num+"等級為:A");
  29.                                 break;
  30.                         case 'B':
  31.                                 System.out.println("分数是"+num+"等級為:B");
  32.                                 break;
  33.                         case 'C':
  34.                                 System.out.println("分数是"+num+"等級為:C");
  35.                                 break;
  36.                         case 'D':
  37.                                 System.out.println("分数是"+num+"等級為:D");
  38.                                 break;
  39.                         case 'E':
  40.                                 System.out.println("分数是"+num+"等級為:E");
  41.                                 break;
  42.                         default:
  43.                          System.out.println("输入的不是有效的分数");
  44.                          break;

  45.                         
  46.                        
  47.                 }
  48.                
  49.         }
  50.         public static void main(String[] args)
  51.         {
  52.               DengJi(46);
  53.         }
  54. }
复制代码
你应该是要在一个分数段中吧,switch语句只接受byte,char,int这些基本数据类型,而且是具体的数字,想你写的程序只有在90,100,80,89每个case对应的具体值,才会正确输出,所以应该自己设立一个标志,表示一个数据段。上面是我写的应该可以正确输出吧。呵呵
回复 使用道具 举报
潘东升 发表于 2012-6-13 10:47
case 59:
case 0:
例如这一段,你想获取的范围是0-59,但是这里只接受0和59。switch是if else的简化版 ,在 ...

我就想用switch 来表示
if 的 我知道
假如我输入的值是60 也是错误的
能编译 但输出 会出错
回复 使用道具 举报
如果你这么写,必须把每一个具体值写进case,case100,case99,case98....case语句如果执行内容是相同的,那么才可以省略不写,在最后那个case(你这里应该是case90)再输出。
回复 使用道具 举报
马东华 发表于 2012-6-13 10:48
你应该是要在一个分数段中吧,switch语句只接受byte,char,int这些基本数据类型,而且是具体的数字,想你 ...

你试一下 输出 会出错的
回复 使用道具 举报
马东华 发表于 2012-6-13 10:48
你应该是要在一个分数段中吧,switch语句只接受byte,char,int这些基本数据类型,而且是具体的数字,想你 ...

我觉得是我调用DengJi 出了问题
即使我就0 60 70 80 90 100 也同样会出错
回复 使用道具 举报
本帖最后由 郑传庆 于 2012-6-13 11:41 编辑

楼主,像判断分数的等级,一般都是用if语句来判断。但是switch语句也可以实现:要么就是把0—100的(100以上)的数全部罗列出来,要么就是用if语句判断后在传个参数进去。但是对于代码的简洁性就显得太繁琐,也增加了系系统的开销。我们有简单便捷的方法不用何必用那么复杂的方法呢?呵呵...不过如果是用来做练习,想验证一下swtch与if的区别那就不一样了。刚才一不小心,还写错了。大家在写的时候还是等小心。

public static void DengJi(int num)
{
  if (num >= 90) {
   System.out.println("分数是" + num + " A");
  } else if (num < 90 && num >= 80) {
   System.out.println("分数是" + num + " B");
  } else if (num < 80 && num >= 70) {
   System.out.println("分数是" + num + " C");
  } else if (num < 70 && num >= 60) {
   System.out.println("分数是" + num + " D");
  } else if (num < 60) {
   System.out.println("分数是" + num + " E");
  }
}
public static void main(String[] args) {
  DengJi(30);
}
回复 使用道具 举报
王明明 发表于 2012-6-13 10:53
我就想用switch 来表示
if 的 我知道
假如我输入的值是60 也是错误的

不好意思,刚看到,我试了,行啊,是不是你电脑出错了啊
回复 使用道具 举报
马东华 发表于 2012-6-13 11:37
不好意思,刚看到,我试了,行啊,是不是你电脑出错了啊

真心不行...
回复 使用道具 举报
可以输出结果 有可能运行的时候类名写错了
回复 使用道具 举报
你类名跟java源文件名相同吗?最好养成习惯,让他们相同。
我测试了,是对的,没问题。
回复 使用道具 举报
马东华 发表于 2012-6-13 11:37
不好意思,刚看到,我试了,行啊,是不是你电脑出错了啊

谢谢 我看到了 我类名叫LianXI
坑爹 老犯这种低级错误... 还老在原地死循环
以为哪个地方调用错了...
回复 使用道具 举报
switch判断的是byte 、int、 char、 short这些类型的具体的量,
比如     
                   case 100:

                 case 90:

                     System.out.println("分数是"+num+"A");

.                                break;
这里判断的是90和100两个具体的数值,而不是(90,100)这样的一个区间
回复 使用道具 举报
楼主这个应该符合你的要求:
  1. class LianXI
  2. {
  3.         public static void DengJi(int num)
  4.         {
  5.                 switch(num/10) //将分数除十就只剩十个段了,这是用switch case就很方便了
  6.                 {        
  7.                         case 10:
  8.                         case 9:
  9.                                 System.out.println("分数是"+num+"A");
  10.                                 break;

  11.                         case 8:
  12.                                 System.out.println("分数是"+num+"B");
  13.                                 break;
  14.                         case 7:
  15.                                 System.out.println("分数是"+num+"C");
  16.                                 break;

  17.                         case 6:
  18.                                 System.out.println("分数是"+num+"D");
  19.                                 break;
  20.                         case 5:
  21.                 case 4:
  22.                 case 3:
  23.                 case 2:
  24.                 case 1:
  25.                         case 0:
  26.                                 System.out.println("分数是"+num+"E");
  27.                                 break;
  28.                         default:
  29.                                 System.out.println("输入的不是有效的分数");
  30.                                 break;
  31.                 }
  32.                
  33.         }
  34.         public static void main(String[] args)
  35.         {
  36.               DengJi(46);
  37.         }
  38. }
复制代码
回复 使用道具 举报

switch判断的是具体的值,
比如上面的  case50:

                 case 0:

                     System.out.println("分数是"+num+"E");

.                     break;
这是对59和0这两个具体的数值进行判断的,而不是(0,59)这样的一个区间。如果想选择区间中的值需要用if语句
if(t>=0 && t<=59)
   {
       System.out.println("分数是"+num+"E");
   }
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马