黑马程序员技术交流社区

标题: 函数问题,为什么缺少返回语句? [打印本页]

作者: 江南小道士    时间: 2013-11-29 11:53
标题: 函数问题,为什么缺少返回语句?
本帖最后由 江南小道士 于 2013-11-29 16:32 编辑

public static char getLevel(int num)
        {
                if(num>=90 && num<=100)
                        return 'A';
                if(num>=80 && num<=89)//前面可以不用else,上行return;结束
                        return 'B';
                if(num>=70 && num<=79)
                        return 'C';
                if(num>=60 && num<=69)
                        return 'D';
                if(num>=0 && num<=59)
                        return 'E';
        }

谢谢各位坛友耐心解答~~~

作者: 努力ing    时间: 2013-11-29 12:07
本帖最后由 努力ing 于 2013-11-29 12:12 编辑

public static char getLevel(int num)
        {
                if(num>=90 && num<=100)
                        return 'A';
                if(num>=80 && num<=89)//前面可以不用else,上行return;结束
                        return 'B';
                if(num>=70 && num<=79)
                        return 'C';
                if(num>=60 && num<=69)
                        return 'D';
                if(num>=0 && num<=59)
                         return 'E';
                else
                        return 'o';

        }
else// 按我的理解这是给一个默认的返回值,逻辑上没有考虑全面导致直接报错


        }
这是修改,这和swith有点相似,因为到了最后给一个默认返回值
作者: ixiangfeng    时间: 2013-11-29 12:09
如果全部不符合if条件你叫JVM如何处理、、、、
作者: xibozglr    时间: 2013-11-29 12:13
楼主,是这样的,num是int型变量,程序只判断了int型的正数部分,编译器认为,如果传入负数实参,程序代码并没有给出相应的判断和解决办法,所以,报错,楼主可以用if……else if()……else结构
作者: HAnG    时间: 2013-11-29 12:23
有返回值的函数,要在函数最后一行写个return,这是必须的。
作者: 江南小道士    时间: 2013-11-29 13:04
public static char getLevel(int num)
        {
                if(num>=90 && num<=100)
                        return 'A';
                if(num>=80 && num<=89)//前面可以不用else,上行return;结束
                        return 'B';
                if(num>=70 && num<=79)
                        return 'C';
                if(num>=60 && num<=69)
                        return 'D';
                if(num>=0 && num<=59)
                        return 'E';
        }
return;//这样写的话也会编译错误——非法的类型开始

作者: 江南小道士    时间: 2013-11-29 13:06
貌似是用if...else...可以。
作者: ixiangfeng    时间: 2013-11-29 13:11
江南小道士 发表于 2013-11-29 13:06
貌似是用if...else...可以。

其实那里最后隐含着一个else,你可以这样想 你写了if{}  然后又写了else  然后else之后要做什么忘了写
作者: 张天昊76    时间: 2013-11-29 13:59
如果调用这个方法时传递的参数不是0到100之间的数,加入是个大于100的数,那函数要求有个chai类型的字符返回值,该返回哪个呢?
所以,你可以提前对这个数判断一下,或者最后加上else,返回一个字符。
  1.         public static char getLevel(int num)
  2.     {
  3.                 if(num <=100 && num >=0) {  // 判断是否是0到100之间的数
  4.             if(num>=90 && num<=100)
  5.                     return 'A';
  6.             if(num>=80 && num<=89)
  7.                     return 'B';
  8.             if(num>=70 && num<=79)
  9.                     return 'C';
  10.             if(num>=60 && num<=69)
  11.                     return 'D';
  12.             if(num>=0 && num<=59)
  13.                     return 'E';
  14.                 }
  15.                 return ' '; // 不是0到100之间的数。可以用异常来做,如果不是0到100之间的数,就提示异常信息并作出相应解决办法
  16.     }
复制代码

或者
  1.         public static char getLevel(int num)
  2.     {
  3.                
  4.             if(num>=90 && num<=100)
  5.                     return 'A';
  6.             if(num>=80 && num<=89)
  7.                     return 'B';
  8.             if(num>=70 && num<=79)
  9.                     return 'C';
  10.             if(num>=60 && num<=69)
  11.                     return 'D';
  12.             if(num>=0 && num<=59)
  13.                     return 'E';
  14.             else{                   // 如果不满足以上所有条件,也要给个结果吧!
  15.                     return ' ';
  16.             }
  17.                
  18.     }
复制代码

用异常来做的话,自定义一个异常。
  1. public class Test {

  2.         public static void main(String[] args) {
  3.                 System.out.println(getLevel(145));
  4.         }

  5.         public static char getLevel(int num)
  6.     {
  7.                 if(num >= 100 || num <= 0){
  8.                         throw new OutOfBoundsException("数字越界了 ");  // 当整数不是在0到100之间时,会抛出此异常。
  9.                 }
  10.                        
  11.             if(num>=90 && num<=100)
  12.                     return 'A';
  13.             if(num>=80 && num<=89)
  14.                     return 'B';
  15.             if(num>=70 && num<=79)
  16.                     return 'C';
  17.             if(num>=60 && num<=69)
  18.                     return 'D';
  19.             else
  20.                     return 'E';
  21.                        
  22.     }
  23. }


  24. class OutOfBoundsException extends RuntimeException {
  25.        
  26.         OutOfBoundsException(String str){
  27.                 super(str);
  28.         }
  29. }
复制代码


作者: 孔雀东南飞    时间: 2013-11-29 15:58
如果num<0  或者 num>100,则所有if都不符合,那么if中的return都读不到。而该方法要求有返回值,所以在所有if之外  添加return,以保证在读不到if语句中return时,该方法依然有return。
作者: 江南小道士    时间: 2013-11-29 16:30
孔雀东南飞 发表于 2013-11-29 15:58
如果num100,则所有if都不符合,那么if中的return都读不到。而该方法要求有返回值,所以在所有if之外  添加 ...

非常感谢,明白了,谢谢
作者: 江南小道士    时间: 2013-11-29 16:32
张天昊76 发表于 2013-11-29 13:59
如果调用这个方法时传递的参数不是0到100之间的数,加入是个大于100的数,那函数要求有个chai类型的字符返 ...

解答非常详细,谢啦!




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