敢问高手!为什么会有数组下标越界!请详细说一下!深谢!

来源:百度知道 编辑:UC知道 时间:2024/05/09 12:18:23
public class Text {
public static void main(String[] args) {
// TODO Auto-generated method stub
String s="sdfgdfhgbnysvfgasfweqwe";
int max=0;
int []total=new int[s.length()];
char []count=s.toCharArray();
char []number=new char[26];
char n1='a';
int n2=(int)n1;

for(int i=0;i<26;i++)
number[i]=(char)(n2+i);
for(int i=0;i<26;i++)
{
for(int j=0;j<s.length();j++)
{
if(j*s.length()%s.length()!=0)j=0;
if(count[i]==number[j])
{
total[j]++;
}
max=getMax(total[j]);
}
}
//System.out.println(max);
}
public static int getMax(int a)
{
int temp=0;
for(int i=0;i<10000;i++)
{
if(a>i) temp=a;
else break;
}
return temp;

}
}

这个程序数组下标越界错误在于
if(count[i]==number[j])
{
total[j]++;
}
一段。
外层循环i从0循环至25,内层循环j从0循环至s.length()-1。
而数组count[]的大小是s.length(),
数组number[]的大小是26。

若s.length()<26,
则当i循环至i>s.length()-1的时候,count[i]数组越界
楼主的例子中就是这种情况。
若 s.length()>26,
则当j循环至j>26的时候,number[j]数组越界。
只有当s.length()=26,
才不会有数组越界。

另外,楼主的程序
if(j*s.length()%s.length()!=0)
j=0;
一段中if的结果永远为非,换句话说,这段程序没有任何意义,因为根本就不会被执行。
函数public static int getMax(int a)也没什么意义。