问题描述
索引超出了数组的范围:if(kk[i]>=kk[j])//此句错误?????????????{temp[m++]=kk[i++];//firsttable}else//第二个有序表记录的KEY小于第一个有序表记录的KEY{temp[m++]=kk[j++];//secondtable}代码为:publicvoidMerge(int[]kk,intlen){intm=1;//getsrartpostiontotemptableintl1=0;//thefirsttableofstartpositioninth1;//endpositionofthefirsttableinth2;//endpositionofthesecondtableintl2=0;//startpositionofthesecondtableinti=0;//recordpositiontothefirsttableintj=0;//recordpositiontothesecondtableint[]temp=newint[kk.Length];//savemergedatatoseqlisttable//mergecodewhile(l1+len==kk.Length){l2=l1+len;//startpositiontothesecondsqllisttableh1=l2-1;//endpositiontothefirstseqlisttable//注意:第二个有序表的结束位置有二种可能1数组的长度2.l2+len-1if(l2+len-1<kk.Length){h2=l2+len-1;//tablelengthincludekk[0]}else{h2=kk.Length;}i=l1;//makestartpositiontothefirstseqlisttable.j=l2;//setstartpositiontothesecondseqlisttable//recordisnotsorttoswqlisttablewhile((i<=h1)&&(j<=h2)){//第一个有序表记录的KEY小于第二个有序表记录的KEYif(kk[i]>=kk[j]){temp[m++]=kk[i++];//firsttable}else//第二个有序表记录的KEY小于第一个有序表记录的KEY{temp[m++]=kk[j++];//secondtable}}//第一个表的记录没有排完while(i<=h1){temp[m++]=kk[i++];}//第二个表的记录没有排完while(j<=h2){temp[m++]=kk[j++];}l1=h2+1;}i=l1;//原顺序表中没有排完的记录while(i<kk.Length){temp[m++]=kk[i++];}//临时顺序表中记录复制到原顺序表中,使原顺序表记录有序for(i=0;i<kk.Length;++i){kk[i]=temp[i];}}
解决方案
解决方案二:
索引超出了数组的范围如果程序已经报这个错误,当然就是这个错误了.代码写的比较复杂,变量太多,还中英文注释混用.传入的len变量也不知道是做什么用的。总之呢,怕头疼没细看。简单的来说,你应该跟踪一下变量,看看在哪一句的时候报错,报错时变量值都是多少,同时关注一下数组是哪个,数组大小是多少。这样就简单直观多了,也更容易定位错误。
解决方案三:
kk[i]>=kk[j]是否有值?先排除Null值