黑马程序员技术交流社区

标题: 返回值问题? [打印本页]

作者: 心灵之歌    时间: 2013-8-11 10:33
标题: 返回值问题?
下面俩种方法,方法一为什么这样写不行,非得写成像方法二那样?这是返回值问题,方法一也包括了所有的可能啊!方法一:public static int checkChar(char[] ch1,char ch){                if(ch1==null){                        new IllegalArgumentException().printStackTrace();                }                else{                        for(int i=0;i<ch1.length;i++){                                if(ch==ch1[i]){                                        return  i;                                }                        }                return -1;                }}
方法二:
public static int checkChar(char[] ch1,char ch){
                int indenx=-1;
                if(ch1==null){
                        new IllegalArgumentException().printStackTrace();
                }
                else{
                        for(int i=0;i<ch1.length;i++){
                                if(ch==ch1[i]){
                                        indenx= i;
                                }
                        }
                }
                return indenx;
}


作者: 薛鹏鹏    时间: 2013-8-11 10:49
麻烦把代码排版一下,这样看起来方便,回答的人才多,可以直接把代码复制过来点击这个  

QQ拼音截图未命名.png (6.87 KB, 下载次数: 9)

QQ拼音截图未命名.png

作者: longlangcx    时间: 2013-8-11 11:04
方法1和方法2是两回事儿,没有哪个对哪个错的,完全是两种需求。
方法1是返回字符首次出现的角标,方法2是返回字符最后一次出现的角标,其实方法1的效率还更高些,使用方法1修改下遍历顺序就能用更高的效率实现方法2的功能。

方法2这种全遍历之后再返回的比较适合用来统计某个字符出现的次数之类的。
作者: 陈贺    时间: 2013-8-11 11:06
  1. public class meiju {
  2.         public static int checkChar(char[] ch1,char ch){
  3.                 if(ch1==null){
  4.                         new IllegalArgumentException().printStackTrace();               
  5.                 }else{
  6.                         for(int i=0;i<ch1.length;i++){
  7.                                         if(ch==ch1[i]){
  8.                                                 return  i;
  9.                                         }                        
  10.                         }//return -1;   return位置不对        
  11.         }         return -1; //应该在这里要不然chi等于null的话就没有返回值了
  12.         }
  13. }
复制代码

作者: jrry    时间: 2013-8-11 11:30
本帖最后由 jrry 于 2013-8-11 11:31 编辑

方法一不行是因为返回值问题,如下
  1. public static int checkChar(char[] ch1, char ch) {
  2.   if (ch1 == null) {
  3.    new IllegalArgumentException().printStackTrace();
  4.   } else {
  5.    for (int i = 0; i < ch1.length; i++) {
  6.     if (ch == ch1[i]) {
  7.      return i;
  8.     }
  9.    }
  10.    return -1;
  11.   }
  12. }
  13. public static int checkChar2(char[] ch1, char ch) {
  14.   int indenx = -1;
  15.   if (ch1 == null) {
  16.    new IllegalArgumentException().printStackTrace();
  17.   } else {
  18.    for (int i = 0; i < ch1.length; i++) {
  19.     if (ch == ch1[i]) {
  20.      indenx = i;
  21.     }
  22.    }
  23.   }
  24.   return indenx;
  25. }
复制代码
在ch1==null时,你只是打印了一个非法参数异常,无返回值,所以编译会出错
而方法二没有报错是因为无论ch1为不为null,你都返回的是一个局部变量indenx
作者: 黑马王晓明    时间: 2013-8-11 15:36
方法一中:if (ch1 == null) {new IllegalArgumentException().printStackTrace();else{}这里没有返回值你只是打印了一个非法参数异常,无返回值,所以编译会出错
需要在判断完毕之后有一个返回值
而方法二:
if (ch1 == null) {new IllegalArgumentException().printStackTrace();else{} return indenx;
没有报错是因为无论ch1为不为null,你都返回的是一个局部变量indenx
作者: 以防万一    时间: 2013-8-13 22:17
亲,如问题已解决请将分类的未解决改为已解决。

以后的问题贴也要及时更改分类哦~


保持队形,谢谢合作




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