2013-03-03 60 views
1

我想知道在ArrayList中的某個點是否存在某個變量,但是,當調用執行此操作的函數兩次時,我得到一個java.lang.IndexOutOfBoundsException。但是,當函數僅被調用一次時,它不會給出錯誤,即使在調用兩次函數時,它們也會檢查是否存在不同的索引,而不是同一個索引。當調用兩次函數時,Java發出越界異常?

代碼;

//package mj.mjo.Vars; 
public boolean varExists(int index){ 
    return mjo_vars.get(index) != null; 
} 

注意,這裏MJO是一個變量,與瓦爾是另一個變量是mj.mjo.Vars類

//package mj.play.StudioCanvas; 
int nonsys = mjo.vars.setVar("TEST", "LOLOLOL", false); // returns 1 
int yessys = mjo.vars.setVar("SYSVARTEST", "WOOHO!", true); // returns 2 

System.out.println("DOES THE VAR \"TEST\" EXIST? " + mjo.vars.varExists(nonsys)); 
System.out.println("DOES THE VAR \"TEST\" EXIST? " + mjo.vars.varExists(yessys)); 
+2

你是否有機會添加到ArrayList並返回* count *而不是實際位置?我打賭''setVar()'*應該*返回'0'和'1'。 – 2013-03-03 16:46:12

+0

爲什麼,我敢打賭你是對的?大聲笑,我現在檢查。 – YepNepDep 2013-03-03 16:47:15

+1

是的,你是對的。雖然我也會將dasblinkenlight的答案標記爲正確的,因爲它也是有建設性的,而且你還沒有做出答案。愚蠢的我。 – YepNepDep 2013-03-03 16:51:44

回答

0

的錯誤指示的index你傳遞給get()值大於或等於列表中元素的數量。更改您的代碼如下,以避免異常:

public boolean varExists(int index){ 
    return index >= 0 
     && index < mjo_vars.size() 
     && mjo_vars.get(index) != null; 
} 

在一般情況下,錯誤意味着什麼是錯的與你的索引機制:在Java中列表和數組索引從零開始,在size()-1結束,包容性。如果通過2觸發異常,但通過1是可以的,那麼列表只有兩個元素 - 索引01

+0

完全有意義,並將發生的錯誤再次分類。我只是無知,感謝張貼這個。很有幫助。 – YepNepDep 2013-03-03 16:55:37