“线程中的异常”;“主要”;java.lang.ArrayIndexOutOfBoundsException:200

“线程中的异常”;“主要”;java.lang.ArrayIndexOutOfBoundsException:200,java,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

有人能帮我摆脱这个例外吗

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
} 

}
公共类Obs2{
int[]ari=新int[200];
int c=1,b,d,x,y,s,j,p,v=0;
int i=1;
公共整数查找(整数N){
对于(int a=2;a2)
{  
做{
j=a/3;
c=a%3;
a=j;
}而(c==0&&j!=1);
如果(c==0&&j==1)
{
ary[v]=s;
v++;
}
}
} 
返回元[N];
}
公共静态void main(字符串[]args)
{
Obs2 obs=新Obs2();
System.out.print(obs.find(10));//这是第56行
} 
}
我的结果是

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

在obs2.obs2.find(obs2.java:28)


在obs2.obs2.main(obs2.java:56)

我不确定您的代码应该做什么,但是您必须检查
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;
 }
for(int a=2;a<100&&l
而另一个解决方案可能是

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;
 }
if(y==0&&x==1&&l
系统输出打印错误(obs.find(10))只会因为
find()
抛出异常而发生。

当您这样做时

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

你怎么能不为你的变量名
l
发疯呢?!它看起来像一个
1
。哈哈。你有没有试着摆脱这个异常?代码中的第28行和第56行在哪里?(你可能需要添加//注释)。更改变量名称我的眼睛在流血。它们看起来一样,但不一样。如你所知,它们是l和1。在获取索引之前,检查数组的长度。这不会有帮助,然后代码进入无限循环。对于值a=2。因为a的值是do while循环中的update。我不明白。你是什么意思?在做了建议更改后,你是否尝试运行此代码?a一直到100,所以x会不断更改。例如,如果a=9,x将是4,y将是1,a将保持与9相同。我确信a=x总是这样,然后对于bucle,从1开始总是;-)放置Log.i(“x y a”,“----”+x+“”+y+“”+a);while之后(y==0&&x!=1);我们尝试用python执行这段代码,效果很好。输出是正确的。我不明白java有什么问题。您正在以相同的值更改一个变量,而它是for变量,您想做什么?