“线程中的异常”;“主要”;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变量,您想做什么?