线程“main”中的异常java.lang.ArrayIndexOutOfBoundsException:200

时间:2015-10-16 20:14:39

标签: java

任何人都可以帮助我摆脱这种例外吗?

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)

2 个答案:

答案 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和崩溃