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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 何明辉 中级黑马   /  2012-9-8 13:41  /  1322 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 何明辉 于 2012-9-8 17:33 编辑

class StringTools
{
public static void getMaxstr(String str1,String str2)
{
  for(int m=str2.length();m>=1;m--)
  {
   for(int i=0,j=i+m-1;j<=str2.length()-1;i++)
   {
   if(str1.contains(str2.substring(i,j+1)))
    {
       System.out.println(str2.substring(i,j+1));//此处应该有问题
    }
    }
  }
}
}
class StringDemo
{
public static void main(String[] args)
{
  StringTools.getMaxstr("xacaca","dadaacac");
  
}
}
上面程序中在运行的时候抛出了IndexOutOfBoundsException,但是我的程序没有问题啊,前面这个异常是运行异常也不需要进行声明啊,又不知道问题出现在哪儿了

3 个回复

倒序浏览
class StringTools
{
public static void getMaxstr(String str1,String str2)
{
   for(int m=str2.length();m>=1;m--)
   {
    for(int i=0,j=i+m-1;j<=str2.length()-1  && i<=j ;i++)
    {
    if(str1.contains(str2.substring(i,j+1)))
     {
        System.out.println(str2.substring(i,j+1));//此处应该有问题
     }
     }
   }
}
}
class StringDemo
{
public static void main(String[] args)
{
   StringTools.getMaxstr("xacaca","dadaacac");
   
}
}

你这个程序有两个错误,你在单步执行的时候,你会发现,你 i 值会存在 > j值的时候,这时str2.substring(i,j+1)方法就会抛出异常,还有一个错误就是有时你的程序的i值会>字符串的长度,这时那个方法也会抛出异常;
解决办法就是在For条件中加上一个判断语句把 for(int i=0,j=i+m-1;j<=str2.length()-1;i++)改成 for(int i=0,j=i+m-1;j<=str2.length()-1  && i<=j ;i++)这样就排除了那两种错误

程序出错的最好办法是调试下,自己跟踪数据看下,大部分问题都可以解决。
希望对你有用

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1 赞一个!

查看全部评分

回复 使用道具 举报
周磊 发表于 2012-9-8 14:25
class StringTools
{
public static void getMaxstr(String str1,String str2)

谢谢帮我解答,因为程序中j=i+m-1有因为m>=1,所以j>=i会一直成立嘛,而且j<=str2.length()-1很容易证明i<=str2.length()啊,我认为不应该是这里吧
回复 使用道具 举报
if (str1.contains(str2.substring(i, j + 1)))
是这句代码报了数组索引越界异常.下面是修改后的代码,但愿是符合你的结果:
  1. public static void getMaxstr(String str1, String str2) {
  2.                 for (int m = str2.length(); m >= 1; m--) {
  3.                         for (int i = 0, j = m; j <= str2.length() - 1 && j >= i; i++) {
  4.                                 if (str1.contains(str2.substring(i, j + 1))) {
  5.                                         System.out.print(str2.substring(i, j + 1) + " ");// 此处应该有问题
  6.                                 }
  7.                         }
  8.                 }
  9.         }
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马