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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

import java.util.ArrayList;

/**
*    请在一个类中编写一个方法,这个方法搜索一个字符数组中是否存在某个字符,
*    如果存在,则返回这个字符在字符数组中第一次出现的位置(序号从0开始计算),
*    否则,返回-1。要搜索的字符数组和字符都以参数形式传递传递给该方法,如果传入的数组为null,
*    应抛出IllegalArgumentException异常。
*    在类的main方法中以各种可能出现的情况测试验证该方法编写得是否正确,例如,字符不存在,字符存在,
*    传入的数组为null等。
*         @author zhuxiumei
*
*/
public class Test2
{
        
        public static void main(String args[])
        {
                char chs[]=new char[]{'3','b','a','c','f','5'};
                char ch='b';
               
        
                try
                {
                        System.out.print(check(chs,ch));
                        
                } catch (Exception e)
                {
                        
                        e.printStackTrace();
                }
        }
        public static int check(char[]chs,char ch) throws Exception
        {        //ArrayList<Integer> list=new ArrayList<Integer>();
                int position[] =new int[]{};
               
                int times=0;
                if(chs==null)
                {
                        throw new Exception("IllegalArgumentException");
                }
               
                for(int i=0;i<chs.length;i++)
                {
                        if(ch==chs)
                        {
                                //list.add(i);
                                position[times]=i;
                                times++;
                        }
                }
                if(position.length==0)
                {
                        return -1;
                }
                //return (Integer) list.get(0);
                return position[0];
        }
}
刚开始我是这样子做的使用ArrayList 来存储接收到的出现的位置 然后通过list.get(0);就可以获字符取第一次出现的位置,后来我就想用一个数组来存储接收字符出现的位置 就有了以上的代码运行的时候就出现了,我是这样想的存储字符第一次出现的位置后将times++ 第二次存到position[times++]里面,结果总是和想的有差别于是就出现了java.lang.ArrayIndexOutOfBoundsException: 0异常
自己调试了一段时间找不到解决的方法

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 鼓励下~~

查看全部评分

4 个回复

倒序浏览
int position[] =new int[]{};[/code]这个定义错了!你即没有动态的为它指定默认大小,也没有静态的为它指定元素
一般定义数组有两种方式;[code=java]int position[] =new int[chs.length];//动态初始化 每个数组元素值为 0
int position[] =new int[]{1 , 2 , 3 , 4};//静态[/code]改成这样试试
int position[] =new int[chs.length];
就是这样子[code=java]public class Test2
{
        
        public static void main(String args[])
        {
                char chs[]=new char[]{'3','b','a','c','f','5'};
                char ch='b';
                     
                try
                {
                        System.out.print(check(chs,ch));
                        
                } catch (Exception e)
                {
                        
                        e.printStackTrace();
                }
        }
        public static int check(char[]chs,char ch) throws Exception
        {        //ArrayList<Integer> list=new ArrayList<Integer>();
                //int position[] =new int[]{}; 这是你原来的
                int position[] =new int[chs.length];
                int times=0;
                if(chs==null)
                {
                        throw new Exception("IllegalArgumentException");
                }
               
                for(int i=0;i<chs.length;i++)
                {
                        if(ch==chs)
                        {
                                //list.add(i);
                                position[times]=i;
                                times++;
                        }
                }
                if(position.length==0)
                {
                        return -1;
                }
                //return (Integer) list.get(0);
                return position[0];
        }
}

评分

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

查看全部评分

回复 使用道具 举报
//改好了,参考下
class Test7
{
        
        public static void main(String args[])
        {
                char chs[]=new char[]{'3','b','a','c','f','5'};
                char ch='f';
               
        
                try
                {
                        System.out.print(check(chs,ch));
                        
                } catch (Exception e)
                {
                        
                        e.printStackTrace();
                }
        }
        public static int check(char[]chs,char ch) throws Exception
        {        //ArrayList<Integer> list=new ArrayList<Integer>();
                int position=0;
               
                int times=0;
                if(chs==null)
                {
                        throw new Exception("IllegalArgumentException");
                }
               
                for(int i=0;i<chs.length;i++,position++)
                {
                        if(ch==chs[position])
                        {
                                //list.add(i);
                                return position;
                                
                        }
                                               
                                }       
                                return -1;
               
                /*if(position.length==0)
                {
                        return -1;
                }*/
                //return (Integer) list.get(0);
               // return position[0];
        }
}

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
怎么感觉楼主写的有点复杂啊,题目没要求很多啊,下面是我写的
  1.         public static void main(String[] args) {
  2.                 char[] arr = new char[] { '3', 'b', 'a', 'c', 'f', '5' };
  3.                 char ch = 'b';
  4.                 try{
  5.                         System.out.println(getPosition(arr, ch));
  6.                 }catch(IllegalArgumentException e){
  7.                         e.printStackTrace();
  8.                 }
  9.         }
  10.         public static int getPosition(char[] arr,char ch){
  11.                 if(arr==null){
  12.                         throw new IllegalArgumentException("数组arr为null");
  13.                 }
  14.                 int pos = -1;
  15.                 for(int i=0;i<arr.length;i++){
  16.                         if(arr[i]==ch){
  17.                                 pos=i;
  18.                                 break;
  19.                         }
  20.                 }
  21.                 return pos;
  22.         }
复制代码
回复 使用道具 举报
我写了一个这个方法,代码如下:
  1.         /**
  2.          * Check if a char in a array, if yes return the index, else return -1
  3.          * @param chrs The char array which we will find from.
  4.          * @param ch The char which we want to find.
  5.          * @return return the index if find the expected char, otherwise return -1.
  6.          */
  7.         public static int CheckChar(char[] chrs, char ch){
  8.                 if(null == chrs)
  9.                         throw new IllegalArgumentException("Please input the array you want to find in.");
  10.                 int index = -1;
  11.                 for(int i=1; i< chrs.length; i++){
  12.                         if(chrs[i]==ch){
  13.                                 index =i;
  14.                                 break;
  15.                         }
  16.                 }
  17.                
  18.                 return index;
  19.         }
复制代码


IllegalArgumentException异常是RuntimeException 的子类,无需声明 throws。
RuntimeException 是那些可能在 Java 虚拟机正常运行期间抛出的异常的超类。
可能在执行方法期间抛出但未被捕获的 RuntimeException 的任何子类都无需在 throws 子句中进行声明。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马