java不知道为什么会发生数组越界异常
这就是我试图解决的问题: 将字符串“WELCOMETOZOHOCORPORATION”保存在二维数组中,并在二维字符串中从左到右和从上到下搜索类似“too”的子字符串
W E信用证O/n
M E T O Z/n
O H O C O/n
R P O R A/n
T I O N
这里的/n用于表示下一行
并将开始索引和结束索引打印为
开始索引:<;1,2>
结束索引:<;3、2>; 但我不知道为什么会发生这种错误
public class Try1 {
public static void main(String[] args) {
Scanner sc= new Scanner (System.in);
System.out.println("Enter the string");
String str=sc.next();
char arr[][]=new char[5][5];
char a[]=str.toCharArray();
int l=a.length;
int k=0,flag=0;
for(int i=0;i<5;i++){
for(int j=0;j<5;j++){
if(k!=l){
arr[i][j]=a[k];
k++;}else{
break;
}
}
}
for(int i=0;i<5;i++){
for(int j=0;j<5;j++){
System.out.print(arr[i][j]+" ");
}
System.out.println();
}
System.out.println("Enter the string to search");
String str1=sc.next();
char b[]=str1.toCharArray();
int l1=b.length,y=0,count=0,rl=0,td=0,v=l1-1;
for(int i=0;i<5;i++){
for(int j=0;j<5;j++){
if(arr[i][j]==b[y])//THIS IS THE LINE WHERE THE ERROR OCCURS
{
count++;
for(y=1;y<l1;y++){
if(arr[i][j+y]==b[y]){
rl=count+rl;
if(rl==l1){
flag=1;
System.out.println("Start Index: "+i+","+j);
System.out.println("End Index: "+i+","+(j+v));
break;
}
}else if(arr[i+y][j]==b[y]){
td=count+td;
if(td==l1){
flag=1;
System.out.println("Start Index: "+i+","+j);
System.out.println("End Index: "+(i+v)+","+j);
break;
}
}
}
}
}
}
if(flag==0){
System.out.println("Not Found");
}
}
The error i am facing is,
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3
at try1.Try1.main(Try1.java:48)
Could you help me guys.
# 1 楼答案
出现错误是因为当您试图访问索引
2
之外的元素时,字符串TOO
的数组中的最大索引b
为2
按如下方式操作:
运行示例:
另一个示例运行:
另一个示例运行:
另一个示例运行:
另一个示例运行:
另一个示例运行:
# 2 楼答案
问题在于
b[y]
。第一次通过循环y
是0,没问题。几行之后在一个内部循环中这个循环使
y
等于l1
,即所搜索单词的长度(在TOO
的情况下为3)。因此,第二次到达发生错误的那一行时,示例中的y
是3,您试图与长度为3的数组中索引3处的元素进行比较。这会导致异常(如您所知,数组索引是基于0的,因此数组中的有效索引是0、1和2)我不明白你的代码应该是如何工作的,所以请犹豫是否提出修复方案。如果合适,可以为外部循环的每次迭代将
y
设置回0