黑马程序员技术交流社区
标题:
关于程序中的异常
[打印本页]
作者:
何明辉
时间:
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)))
是这句代码报了数组索引越界异常.下面是修改后的代码,但愿是符合你的结果:
public static void getMaxstr(String str1, String str2) {
for (int m = str2.length(); m >= 1; m--) {
for (int i = 0, j = m; j <= str2.length() - 1 && j >= i; i++) {
if (str1.contains(str2.substring(i, j + 1))) {
System.out.print(str2.substring(i, j + 1) + " ");// 此处应该有问题
}
}
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2