2015-10-16 55 views
-7

任何人都可以幫助我擺脫這種異常?異常在線程「主」java.lang.ArrayIndexOutOfBoundsException:200

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)

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

+3

如何避免使用變量名'l'發瘋? !它看起來像一個'1'。大聲笑。 – gonzo

+0

你有什麼試圖擺脫例外?代碼中的第28行和第56行在哪裏? (你可能想添加//註釋)。 –

+1

更改變量名稱我的眼睛在流血。 – dguay

回答

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; 
} 

ALWAYSŸ== 0和x == 1和++ v作爲無限循環執行 v = 1,2,3,...... 200和崩潰

+0

a一直持續到100,因此x不斷變化。例如,如果a = 9 x將是4 y將是1並且wil保持與9相同。 – alp

+0

我相信a = x始終在做,然後對於始終從1開始的bucle ;-) – juankirr

+0

放置日誌。我(「xya」,「-----」+ x +「」+ y +「」+ a); while(y == 0 && x!= 1)後; – juankirr

0

我不確定你的代碼應該做什麼,但是如果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; 
} 

錯誤的System.out.print(obs.find(10));只發生,因爲find()拋出異常。

+0

這沒有幫助,然後代碼進入無限循環。對於值a = 2,因爲a的值在do-while循環中更新。 – YoungHobbit

+0

我不明白。你什麼意思? – sfandler

+0

在提出建議更改後,您是否嘗試運行此代碼? – YoungHobbit

相關問題