黑马程序员技术交流社区

标题: 怎么抛出IllegalArgumentException异常等两个问题(已解决) [打印本页]

作者: 陆强强    时间: 2012-5-10 16:29
标题: 怎么抛出IllegalArgumentException异常等两个问题(已解决)
本帖最后由 陆强强 于 2012-5-11 16:31 编辑

/*
测试题三;在一个字符串数组中找到指定元素,如果元素不存在返回-1,如果传入的数组为null则
                抛出IllegalArgumentException异常,要求结果有字符存在,字符不存在,数组为空等说明。
*/
class nullException extends RuntimeException
{
   nullException(String massage)
        {
                   super(massage) ;
   }
}
class  searching
{
        private String key;
        private String[] str;
        searching(String[] str,String key)
        {
                this.str=str;
                this.key=key;
        }
        public int search(String[] str,String key)//throws nullException
        {
                        if(str==null)
                                throw new nullException("数组为空");//要求是抛出IllegalArgumentException异常,怎么抛?问题一
                                int x=0        ;
                                while(x<str.length-1)
                                {
                                        if (key.equals(str[x]) )
                                                return x ;
                                        else
                                                x++;
                                }
                        return -1;//return -1后“字符不存在”怎么打印出来?问题2
        }
}
class SameSearch2
{
        public static void main(String[] args)
        {
                try
                {
                        String[] str=null;
                        searching sea=new searching(str,"t");
                        System.out.println("字符存在,"+sea.search(str,"t"));

                }
                catch (nullException e)
                {
                         e.printStackTrace();
                }

        }
}
作者: 李啸    时间: 2012-5-10 16:35
本帖最后由 李啸 于 2012-5-10 16:43 编辑

亲 你在试试 我的运行结果是正常的
作者: HeiMaYSL    时间: 2012-5-10 18:13
/*
测试题三;在一个字符串数组中找到指定元素,如果元素不存在返回-1,如果传入的数组为null则
                 抛出IllegalArgumentException异常,要求结果有字符存在,字符不存在,数组为空等说明。
*/
class nullException extends RuntimeException
{
    nullException(String massage)
         {
                    super(massage) ;
    }
}
class  searching
{
         private String key;
         private String[] str;
         searching(String[] str,String key)
         {
                 this.str=str;
                 this.key=key;
         }
         public int search(String[] str,String key)//throws nullException
         {
                         if(str==null)
                                 throw new IllegalArgumentException("数组为空");//要求是抛出IllegalArgumentException异常,怎么抛?问题一
                                                                                                                                        //你如果想抛出IllegalArgumentException异常的话,就直接写
                                                                                                                                        //throw new IllegalArgumentException("数组为空");不就行了吗?
                                                                                                                                        //但是,你上面自定义的异常就没有用了啊。
                                 int x=0;
                                 while(x<str.length-1)
                                 {
                                         if (key.equals(str[x]) )
                                                 return x ;
                                         else
                                                 x++;
                                 }
                         return -1;//return -1后“字符不存在”怎么打印出来?问题2
                                                 //在这里因为你传入的是数组str是空的,长度肯定为空,所以,while里面不执行,直接返回了-1.
                                                 /*
                                                 这时,你想打印出-1时,是不可能的,因为,异常在 searching sea=new searching(str,"t");时,就发生了异常,
                                                 此时,就不会运行下面的代码了,而是跳到了catch里面捕获到了异常。

                                                 如果是实在想让程序返回-1时,完全可以写在catch里面啊。这样也可以说明你传入的数组是空的。因为,你要让程序
                                                 返回-1,不就是想说明传入的数组为空吗?是吧

                                                 */
         }
}
class SameSearch2
{
         public static void main(String[] args)
         {
                 try
                 {
                                       
                         String[] str=null;

                         searching sea=new searching(str,"t");
                                                  
                         System.out.println("字符存在,"+sea.search(str,"t"));
                                                         

                }
                 catch (IllegalArgumentException e)
                 {
                                                 return -1;
                          e.printStackTrace();
                 }
               

        }
}


注意:当程序出现异常时,就不会往下面执行了,就直接跳到了catch代码块里面了。
作者: 小小企鹅    时间: 2012-5-10 19:44
public int search(String[] str,String key)
        {
                        if(str==null)
                                throw new IllegalArgumentException("数组为空");
                        int x=0;
                        while(x<str.length)
                        {
                               
                                if (key.equals(str[x]) )
                                        return x ;
                                else
                                        x++;
                       
                        }
                        if(x >= str.length)
                        throw new IllegalArgumentException("字符不存在");
                        return -1;
        }
作者: 黄坚声    时间: 2012-5-10 20:11
哥们,本来很简单的问题,你把它搞复杂了。

你首先对传进来的参数作判断,如果为null,就直接Throw new RuntimeException("这里加点提示信息");
程序写得越简单越爽!

希望对你有帮助。
作者: 陆强强    时间: 2012-5-11 10:38
本帖最后由 陆强强 于 2012-5-11 16:36 编辑
黄坚声 发表于 2012-5-10 20:11
哥们,本来很简单的问题,你把它搞复杂了。

你首先对传进来的参数作判断,如果为null,就直接Throw new Run ...


要求是用户指定的元素如果数组里没有,给予“字符不存在提示”。
已经搞定了,谢谢
public static String search(String[] str,String key)throws IllegalArgumentException//改成了返回STRING
{
   if(str==null)
        throw new IllegalArgumentException("数组为空");
    int x=0 ;
while(x<str.length-1)
    {
     if (key.equals(str[x]) )
      return "字符存在,"+x ;
     else
      x++;
    }
    return "字符不存在,"+-1;//返回值直接用
                                             //"字符不存在,"+-1
}
}
class SameSearch2
{
public static void main(String[] args)
{
    String[] str={"a","2,2","dui","",null,"09"};
   searching sea=new searching(str,"t");
   System.out.println(sea.search(str,"t"));





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