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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 陆强强 于 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();
                }

        }
}

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

5 个回复

正序浏览
本帖最后由 陆强强 于 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"));
回复 使用道具 举报
哥们,本来很简单的问题,你把它搞复杂了。

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

希望对你有帮助。

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

回复 使用道具 举报
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;
        }
回复 使用道具 举报
/*
测试题三;在一个字符串数组中找到指定元素,如果元素不存在返回-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代码块里面了。

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

回复 使用道具 举报
本帖最后由 李啸 于 2012-5-10 16:43 编辑

亲 你在试试 我的运行结果是正常的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马