任何人都可以帮助我摆脱这种例外吗?
public class Obs2 {
int [] ary=new int[200];
int c=1,b,d,x,y,s,j,p,v=0;
int i=1;
public int find(int N){
for(int a=2;a<100;a++)
{
s=a;
do
{
x=a/2;
y=a%2;
if(y==0)
{
a=x;
}
}while(y==0 && x!=1);
if(y==0 && x==1)
{
ary[v]=s; //This is line 28
++v;
}
else if(y!=0 && a>2)
{
do{
j=a/3;
c=a%3;
a=j;
}while(c==0 && j!=1);
if(c==0 && j==1)
{
ary[v]=s;
v++;
}
}
}
return ary[N];
}
public static void main(String[] args)
{
Obs2 obs =new Obs2();
System.out.print(obs.find(10)); //And this is line 56
}
}
我的输出说
线程“main”中的异常java.lang.ArrayIndexOutOfBoundsException:200
在obs2.Obs2.find(Obs2.java:28)
at obs2.Obs2.main(Obs2.java:56)
答案 0 :(得分:0)
我不确定您的代码应该做什么,但如果l
超过ary
的大小,您必须检查某个地方。
一种解决方案可能是
for(int a = 2; a < 100 && l < ary.length; a ++) {
...
}
而另一种解决方案可能是
if(y == 0 && x == 1 && l < ary.length) {
ary[l] = s; // line where your error occurs
++ l;
}
System.out.print(obs.find(10));
上的错误只会发生,因为find()
会抛出异常。
答案 1 :(得分:0)
当你做
时do
{
x=a/2;
y=a%2;
if(y==0)
{
a=x;
}
}while(y==0 && x!=1);
总是x = 1,y = 0,a = 1
然后在if-else
中if(y==0 && x==1)
{
ary[v]=s; //in this line i get error
++v;
}
始终y == 0且x == 1且++ v作为无限循环执行 v = 1,2,3,...... 200和崩溃