我在下面的代码下运行时得到ArrayIndexOutOfBoundsException。我正在尝试计算字符串中非重复子字符串值的总数。我添加了try catch来停止此异常。通常我会进入s2[j]=s2[k];
行。
public class SubStrLen2 {
public static int StrLen1(String s) {
int n = s.length();
int count=0, flag=0;
char[] s1 = s.toCharArray();
char[] s2 = s1;
// char[] s3;
for(int i=0; i<=n;i++)
{
for(int j =0;j<i; j++)
{
if(s1[i] == s2[j])
{
if(i!=j) {
flag = 1;
for(int k=j+1;k<=n;k++,j++)
{
s2[j]=s2[k];
}
break;
}
}
}
if(flag==0)
{
//s3[i]=s1[i];
count ++;
}
flag =0;
}
return count;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
String sc = "GreekGods";
try {
System.out.println("Length of the Sub str"+ StrLen1(sc));
}catch(ArrayIndexOutOfBoundsException e) {
System.out.println("Error in Array");
}
}
}
最佳答案
有很多观察,以0开头的循环索引应以总长度-1 结束,因此,如果n是您的Array长度,则代码应为
for(int i=0; i<n;i++)
同样的问题在
for(int k=j+1;k<=n;k++,j++)
在这里,您不仅在使用 = 符号,这将导致ArrayIndexOutOfBoundsException,而且您还在递增j ,除非有意为之,否则它是父循环的一部分,您可能无法获得预期的结果。
关于java - 运行计数非重复的子str操作时获取arrayindexoutofboundsexception,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58723256/