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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 梁清平 中级黑马   /  2012-6-13 21:06  /  3998 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

请在一个类中编写一个方法,这个方法搜索一个字符数组中是否存在某个字符,如果存在,则返回这个字符在字符数组中第一次出现的位置(序号从0开始计算),否则,返回-1。要搜索的字符数组和字符都以参数形式传递传递给该方法,如果传入的数组为null,应抛出IllegalArgumentException异常。在类的main方法中以各种可能出现的情况测试验证该方法编写得是否正确,例如,字符不存在,字符存在,传入的数组为null等。

这个测试题我是这样做的。。可总觉得有什么地方不对劲求高手指点哪些地方需要改进。。

public class SearchIndex
{
        public static void main(String[] args)
        {
                char[] arr = {'f','s','j','y'};
                //arr =null;
                int index = getIndex(arr,'a');
                System.out.print(index);
               
        }
        public static int getIndex(char[] arr,char ch)
        {
                if(arr==null)
                        throw new IllegalArgumentException("数组参数不能为null");
                else
                {
                        for(int i=0;i<arr.length;i++)
                        {
                                if(arr==ch)
                                        return i;
                        }
                        return -1;
                }
        }
}

9 个回复

倒序浏览
本帖最后由 王明明 于 2012-6-13 21:21 编辑
  1. public class Demo {   // 因为主函数定义了Public 所以文件名跟类名必须一样才能通过 编译 你编译的时候注意一下
  2. public static void main(String[] args) {

  3.   char[] strs={'d','s','g','s','i','y'};
  4.   int index=searchCharIndex(strs, 'y');
  5.   if(index==-1){
  6.    System.out.println("字符不存在");
  7.   }else{
  8.    System.out.println("字符的位置为:"+index);
  9.   }   
  10. }


  11. public static int searchCharIndex(char[] chars,char c){
  12.   int index=-1;//要查找的字符在数组中的位置
  13.   
  14.   //如果数组为null,则抛出IllegalArgumentException
  15.   //如果不为null,则开始查找字符在数组中的位置
  16.   if(chars==null){
  17.    new IllegalArgumentException().printStackTrace();
  18.   }else{
  19.    for (int i = 0; i < chars.length; i++) {
  20.     if(c==chars[i]){
  21.      index=i;
  22.     }
  23.    }
  24.   }
  25.   return index;
  26. }
  27. }
复制代码
回复 使用道具 举报
你的这段程序有两个问题  一、没有判断出参数是否存在这个漏掉了  二、在判断数组中元素和所给参数相等时的等式书写不对的 应该是 if(arr[i]==ch)  而不是arr==ch  这是两个不可比较的类型   至于第一个应该加一个判断条件 if(index=-1)System.out.println("该元素不存在");
回复 使用道具 举报
要验证各种情况,我在你的基础上加了一个传入空数组,代码如下
  1. public class SearchIndex
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 char[] arr = {'f','s','j','y'};
  6.                                 char[] arr1=null;
  7.                 int index = getIndex(arr,'f');
  8.                                 int index1=getIndex(arr1,'f');
  9.                 System.out.print(index);
  10.                
  11.         }
  12.         public static int getIndex(char[] arr,char ch)
  13.         {
  14.                 if(arr==null)
  15.                         throw new IllegalArgumentException("数组参数不能为null");
  16.                 else
  17.                 {
  18.                         for(int i=0;i<arr.length;i++)
  19.                         {
  20.                                 if(arr[i]==ch)
  21.                                   return i;
  22.                         }
  23.                         return -1;
  24.                 }
  25.         }
  26. }
复制代码
回复 使用道具 举报
你的 if(arr[i] == ch)少了下角标!其次我觉得为空时抛异常,会让程序停止,这样有几个数组调用这个方法时候,都不会显示结果。我改为返回值为Integer,当为空时候返回null,这样其他的结果也能显示,为空的数组你也明白是什么意思。

public class Test
{
        public static void main(String[] args)
        {
                char[] arr = {'f','s','j','y'};
                 
                 char[] arr1=null;
                 
        Integer index = getIndex(arr,'a');
                 
        Integer  index1=getIndex(arr,'f');
        
        Integer  index2=getIndex(arr1,'f');
        
        System.out.println(index);
        System.out.println(index1);
        System.out.println(index2);
               
       }
        public static Integer getIndex(char[] arr,char ch)
        {
                if(arr==null)
                        return null;
                else
                {
                        for(int i=0;i<arr.length;i++)
                        {
                                if(arr[i] == ch)
                                        return i;
                        }
                        
                        return -1;
                }
        }
}
回复 使用道具 举报
static List<Integer> lst=null;//这个用来存储查找字符出现的位置
public static void main(String[] args) {
   lst = new ArrayList<Integer>();
  char[] arr = { 'f', 's', 'j', 'y', 'j', 'y' };
  int index =getIndex(arr, 'j');
  System.out.print(index);
//  System.out.print(lst);
}
public static int getIndex(char[] arr, char ch) {
  if (arr == null)
   throw new IllegalArgumentException("数组参数不能为null");
  else if(ch==0) throw new IllegalArgumentException("查找的数不能为null");
  else {
   for (int i = 0; i < arr.length; i++) {
    if (arr[i] == ch)//你这里要写成arr[i]
//     lst.add(i);
     return i;
   }
   return -1;
  }
   
}
回复 使用道具 举报
public class SearchIndex
{
         public static void main(String[] args)
         {
                 char[] arr = {};
                 //arr =null;
                 int index = getIndex(arr,'j');
                 System.out.print(index);
                 
        }
         public static int getIndex(char[] arr,char ch)
         {
                 if(arr.length==0)
                         throw new IllegalArgumentException("数组参数不能为null");
                 else
                 {
                         for(int i=0;i<arr.length;i++)
                         {
                                 if(arr[i]==ch)//你的是if(arr==ch)这是一个细节错误,要注意
                                         return i;
                         }
                         return -1;
                 }
         }
}
我在你那代码上改动了一下,将if(arr==null)改为了  if(arr.length==0),这样就能达到你的预期结果。你的构思真的还不错,以后好好发挥。
另外我分析了你的错误,char的默认值是:“/u0000”,你可以将char先用头totring转为字符串,在与null比较,最好用equals而不是“==”。
回复 使用道具 举报
王明明 发表于 2012-6-13 21:19

很清晰的思路和代码格式,学习了。
回复 使用道具 举报
不小心看到这里的,,,学习学习。
回复 使用道具 举报
我也刚学,同上吧
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马