解决一个数组越界异常

jwmwdxxxx 2010-02-12 01:10:48
10万次循环里大概有100次会出现数组越界,通常在catch语句里重新调用doSomething方法即可成功解决;
但是有1到2次数组越界无法跳出catch,而且无法预见,在catch里重新调用doSomething方法无法跳出异常,把数据单独提取出来也找不出原因来,由于这种数据很少出现,所以可以忽略不计,也不想浪费时间研究数组方面的问题,但是循环进行到这个数据的时候就是死循环了,问有好的方法可以跳出这次循环,进入下一次循环?

public class A{

public static void main(String[] args){
new Thread(new B()).start();
}
}

public class B implements Runnable{

public B(){}

public void run(){

for(int a=0;a<100000;a++){
C.doSomething(a);
}
}
}

public class C{

public static void doSomething(int a){
try {
//主要代码隐藏
}catch (IndexOutOfBoundsException e){
//处理数组越界异常
C.doSomething(a);
}
}
}

...全文
696 11 打赏 收藏 转发到动态 举报
写回复
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
ghkjgod 2010-02-14
  • 打赏
  • 举报
回复
碰到哪个特定值?能跟踪下不?
licip 2010-02-14
  • 打赏
  • 举报
回复
这种方式我觉得当然是提前去判断数组的大小。要把这种异常排除在外,才是最好的方式。
jwmwdxxxx 2010-02-14
  • 打赏
  • 举报
回复
引用 7 楼 qqbz 的回复:
是有意产生这种异常?

最好还是避免这种异常。

只是没时间修改中间的核心代码,想用偷懒的方法解决这个问题
wfeng007 2010-02-14
  • 打赏
  • 举报
回复
你这个是递归调用 所以会出现死循环。。。
就是说 你C.doSomething()出现exception但是在处理exception的程序中你又去C.doSomething(),然后又一次Exception...这样无限往复就死循环了。理论上应该会栈益出。

解决办法就是不要在catch中递归调用C.doSomething()。而是直接写一段程序,放在这里来处理这种情况,至少打印出不同的出错信息,这样方便你判断到底是哪里出现异常。

其实最后你要考虑清楚,出现异常状况你到底要怎么处理。忽略不计?还是一定要处理?


qqbz 2010-02-13
  • 打赏
  • 举报
回复
是有意产生这种异常?

最好还是避免这种异常。
jwmwdxxxx 2010-02-13
  • 打赏
  • 举报
回复
引用 4 楼 jafapple 的回复:
引用 3 楼 soli11722984 的回复:要不在catch里加个调度器,过一定的时间,就认为是死循环,再由调度器跳出去


这个办法也可行,要不就是加个计数器变量,当达到一定次数,退出。

你这个死loop出现的原因是因为出现会导致outBound的数据,你一直调用dosomething,程序就一直抛出异常,到最后是内存溢出的下场。

不是内存溢出,因为只有特定的值才会进入死循环,受楼上调度器的启发我用System.currentTimeMillis()设置时间超过指定的时间即跳出,这样效果不错,不知有没更好的方法
icy_csdn 2010-02-12
  • 打赏
  • 举报
回复
应该好好检查检查你的核心代码,你的核心代码处理有问题。
try {
//主要代码隐藏
}
jafapple 2010-02-12
  • 打赏
  • 举报
回复
引用 3 楼 soli11722984 的回复:
要不在catch里加个调度器,过一定的时间,就认为是死循环,再由调度器跳出去



这个办法也可行,要不就是加个计数器变量,当达到一定次数,退出。

你这个死loop出现的原因是因为出现会导致outBound的数据,你一直调用dosomething,程序就一直抛出异常,到最后是内存溢出的下场。

soli11722984 2010-02-12
  • 打赏
  • 举报
回复
要不在catch里加个调度器,过一定的时间,就认为是死循环,再由调度器跳出去
小贝壳666 2010-02-12
  • 打赏
  • 举报
回复
public class C{

public static void doSomething(int a){
try {
//主要代码隐藏
}catch (IndexOutOfBoundsException e){
//处理数组越界异常
C.doSomething(a);

continue;

}
}
}
小贝壳666 2010-02-12
  • 打赏
  • 举报
回复
continue
回复内容太短了!
相关推荐

62,569

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告