请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

关于数组越界的问题

我的代码:

public E remove(int index){
   if(index<0||index>=size)
       throw new IllegalArgumentException("remove failed.");
   E ret=data[index];
   for(int i=index+1;i<size;i++)
       data[i-1]=data[i];
   size--;
   data[size]=null;
   if(size==data.length/4&&data.length/2!=0);
       resize(data.length/2);
   return ret;
}


老师的代码:

public E remove(int index){
   if(index < 0 || index >= size)
       throw new IllegalArgumentException("Remove failed. Index is illegal.");

   E ret = data[index];
   for(int i = index + 1 ; i < size ; i ++)
       data[i - 1] = data[i];
   size --;
   data[size] = null; // loitering objects != memory leak

   if(size == data.length / 4 && data.length / 2 != 0)
       resize(data.length / 2);
   return ret;
}

一模一样的代码啊,为什么我的运行起来就出现了数组越界!

找了整整一个小时完全没有找到区别,求指导

正在回答 回答被采纳积分+3

1回答

liuyubobobo 2018-07-10 23:41:02

猛地看你的这段代码没有问题。


首先,一般编译器的报错会提示具体在程序的哪一行抛出的异常。比如使用这个课程介绍的IntelliJ IDEA,下面的例子和信息,明确提示了,是在Main.java的第6行产生的问题:

https://img1.sycdn.imooc.com//szimg/5b44d1e300014b3909120456.jpg


具体在使用我的参考代码的时候,可以使用替换法尝试定位自己程序的问题。

1)把我的这段remove代码替换到你的程序中,看看是不是就没有问题了?如果没有问题,说明这两段程序有区别:)

2)如果依然有问题,查看一下是不是子过程的问题?比如resize的过程?依然是,可以尝试一下把你的resize替换成我的resize,看是否就没有问题了?如果没有问题,说明你原来的resize有问题:)

3)在一个函数里,几条语句组成的逻辑块,甚至是单一语句,都可以使用这种方法验证:)


另外,debug的过程不能只盯着代码看,必须具体的去调试。加断点,具体地跟一下自己的程序,看看究竟是在运行删除哪个数据的时候,在自己程序的哪里,出了错误?只有经过大量的调试积累,才能练就自己“火眼金睛”的“看”出代码bug在哪里的能力哦:)


加油!

3 回复 有任何疑惑可以回复我~
  • 提问者 请叫我deeply #1
    谢谢老师耐心的回答,把老师的这段代码替换掉我的代码是没有问题的,我曾经尝试过耐心的debug,结果调试了一个小时,因为涉及到多重调用以及循环,看得实在头晕又看不出来,后来放弃调试,然后下载到源码,跟老师的代码每一个字符都细心比较了多遍,发现真的是没有区别,但是确实虽然我的代码执行不报错,但是会出现意料之外的结果,实在是摸不着头脑
    回复 有任何疑惑可以回复我~ 2018-07-11 00:59:39
  • bradleyu 回复 提问者 请叫我deeply #2
    if(size==data.length/4&&data.length/2!=0);  后面多了个引号,建议以后加花括号:        
    if (size == data.length / 4 && data.length / 2 != 0) {
                resize(data.length / 2);
     }
    回复 有任何疑惑可以回复我~ 2018-09-29 14:48:15
  • bradleyu 回复 提问者 请叫我deeply #3
    说错了,分号
    回复 有任何疑惑可以回复我~ 2018-09-29 14:49:00

相似问题

登录后可查看更多问答,登录/注册

问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号