黑马程序员技术交流社区

标题: 关于程序中的异常 [打印本页]

作者: 何明辉    时间: 2012-9-8 13:41
标题: 关于程序中的异常
本帖最后由 何明辉 于 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,但是我的程序没有问题啊,前面这个异常是运行异常也不需要进行声明啊,又不知道问题出现在哪儿了
作者: 周磊    时间: 2012-9-8 14:25
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++)这样就排除了那两种错误

程序出错的最好办法是调试下,自己跟踪数据看下,大部分问题都可以解决。
希望对你有用
作者: 何明辉    时间: 2012-9-8 14:42
周磊 发表于 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()啊,我认为不应该是这里吧
作者: AngieFans85    时间: 2012-9-8 14:55
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.         }
复制代码





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