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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 心灵之歌 中级黑马   /  2013-8-11 10:33  /  1286 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

下面俩种方法,方法一为什么这样写不行,非得写成像方法二那样?这是返回值问题,方法一也包括了所有的可能啊!方法一: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;
}

评分

参与人数 1黑马币 +3 收起 理由
以防万一 + 3 按照方法去排版会更清晰

查看全部评分

6 个回复

倒序浏览
麻烦把代码排版一下,这样看起来方便,回答的人才多,可以直接把代码复制过来点击这个  

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

QQ拼音截图未命名.png
回复 使用道具 举报
方法1和方法2是两回事儿,没有哪个对哪个错的,完全是两种需求。
方法1是返回字符首次出现的角标,方法2是返回字符最后一次出现的角标,其实方法1的效率还更高些,使用方法1修改下遍历顺序就能用更高的效率实现方法2的功能。

方法2这种全遍历之后再返回的比较适合用来统计某个字符出现的次数之类的。

评分

参与人数 1黑马币 +3 收起 理由
以防万一 + 3 加上代码的解析会更清晰~

查看全部评分

回复 使用道具 举报
  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. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
以防万一 + 1 帮助别人是对自己知识的巩固~

查看全部评分

回复 使用道具 举报
本帖最后由 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

评分

参与人数 1技术分 +1 收起 理由
以防万一 + 1 帮助别人也是对自己知识的巩固~.

查看全部评分

回复 使用道具 举报
方法一中:if (ch1 == null) {new IllegalArgumentException().printStackTrace();else{}这里没有返回值你只是打印了一个非法参数异常,无返回值,所以编译会出错
需要在判断完毕之后有一个返回值
而方法二:
if (ch1 == null) {new IllegalArgumentException().printStackTrace();else{} return indenx;
没有报错是因为无论ch1为不为null,你都返回的是一个局部变量indenx
回复 使用道具 举报
亲,如问题已解决请将分类的未解决改为已解决。

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


保持队形,谢谢合作
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马