2016-01-31 55 views
0

IndexOutOfBounds異常

public constructor (int x) 
 
{ 
 
    
 
    
 
    try 
 
    { 
 
     this.x = x; 
 
     if (x < 1 || x> MAX) 
 
    
 
    } 
 
    
 
    catch (IndexOutOfBoundsException e) 
 
    
 
    { 
 
     
 
     // array allocat 
 
     // calim error 
 
    
 
    
 
    } 
 
     
 
    
 
    }

如果我有接受需要在[1,MAX)int參數構造,我將如何正確地利用IndexOutOfBoundsException異常,如果參數是不在區間內?如果它是爲OBJ [] x數組分配內存的話。我以爲我可以只使用,如果其他人,但這是不一樣的行爲

+0

if else else有什麼問題? – thedarkpassenger

+1

你試過什麼代碼?另外,'IndexOutOfBoundsException'可能不是最好的選擇,你可能想使用['InvalidParameterException'](https://docs.oracle.com/javase/7/docs/api/java/security/InvalidParameterException。 HTML)。 – birryree

+0

如果參數不在間隔內,你應該在構造函數 – AdamSkywalker

回答

0

爲什麼不,如果其他?

你爲什麼不能嘗試這樣的事情..

try{ 
    //Your code 
}catch(IndexOutOfBOundsException e){ 
    if(){ // your 1st cond 
    } 
    else if(){// your 2nd cond 
    } 
} 
+0

沒關係,所以我想構造函數拋出一個異常,如果參數不在區間[0, MAX),否則爲陣列分配mem – Bobby

+0

我不會在catch之前檢查它是否在範圍內,那麼如果它不是catch? – Bobby

+0

你可以通過簡單的if,else語句實現同樣的效果,而不會拋出任何異常,或者使用異常。爲什麼你想讓構造函數拋出一個異常並捕獲它,創建一個對象? – Ritesh

0

我不明白爲什麼你需要一個例外,但如果你想進入該catch塊,你必須拋出IndexOutOfBoundsException異常。然後你可以在catch塊中做所需的動作。

try { 
     if (x < 1 || x > MAX) 
      throw new IndexOutOfBoundsException(); 
    } 

catch (IndexOutOfBoundsException e) 

    { 
     System.err.println("Index must be in 1 - MAX interval."); 
     e.printStackTrace(); 
     //do what you want here 
    } 
+0

爲什麼你需要在這裏捕捉新的關鍵詞? – Bobby

+0

所以你必須手動扔它?捕捉之前? – Bobby

+0

如果你的目標是進入該catch塊,你必須拋出一個異常或發生異常以某種方式發生(如嘗試使用數組)。否則catch塊中的代碼將無法訪問。 – Raptor

相關問題